爬虫框架scrapy入门(一)

爬虫框架Scrapy入门 (一)

这段时间一直在学爬虫,做了一些简单的项目,爬取数据的过程中,被封过ip,需要翻墙,为了大规模的数据采集,开始学习scrapy框架。参照的是静觅大神的《Python3网络爬虫开发实战》 本次爬取的网站是scrapy官网http://quotes.toscrape.com


1. scrapy的安装

建议使用anaconda的一键安装,我的电脑上同时有anaconda和pycham,一般pycam使用的anaconda的环境,anaconda的Prompt输入命令 conda install scrapy

2. scrapy入门

创建项目
项目文件可以直接用scrapy命令生成,scrapy startproject tutorial(加文件名)。项目生成之后,会有以下文件目录。

  • spiders:spiders包含spider实现,每个项目中都有。
  • items.py:定义Item数据结构。
  • middlewares.py:定义Spider Middlewares和Downloader Middlewares的实现。
  • pipelines.py:定义了Item Pipeline的实现。
  • settings.py:它定义了项目的全局配置。

创建Spider
在命令行创建spider,执行命令如下:
cd tutorial(对应项目名)
scrapy genspider quotes(Spider的名称) quotes.toscrape.com(网站域名)
执行之后,spiders文件夹中多了一个quotes.py,这个文件就是刚刚创建的spider。
parse是Spider的一个方法,默认情况下,被调用时start_urls里面的链接完全请求,返回的相应作为唯一的参数传递给函数。该方法复杂返回响应,提取数据或者进一步处理请求。


解析Response
parse()的方法参数response是start_urls的链接爬取后的结果,在parse()方法中。可以直接对response变量中包含的内容进行解析,比如解析源代码,或者根据网页中的链接得到下一个请求。

   import scrapy
    from tutorial.items import QuoteItem
    
    class QuotesSpider(scrapy.Spider):
    name = 'quotes'
    allowed_domains = ['quotes.toscrape.com']
    start_urls = ['http://quotes.toscrape.com/']
    
    def parse(self, response):
    quotes = response.css(".quote")
    for quote in quotes:
    item = QuoteItem()
    text = quote.css(".text::text").extract_first()
    author = quote.css(".author::text").extract_first()
    tags = quote.css(".tags .tag::text").extract()
    item["text"] = text
    item["author"] = author
    item["tags"] = tags
    yield item
    
    next = response.css(".pager .next a::attr('href')").extract_first()
    url = response.urljoin(next)
    yield scrapy.Request(url = url,callback=self.parse)

猜你喜欢

转载自blog.csdn.net/wangyueban/article/details/88024314