py 第二十九天 Scrapy爬虫框架2:创建项目

一、创建项目


首先要进入文件存放的目录,然后使用scrapy startproject加上项目名称,就可以在存放的目录得到一个文件夹。该文件夹中会包含有以下内容:

文件名 作用
scrapy.cfg 项目的配置文件
myproject文件夹 项目大本营
myproject/items.py 定义项目中需要获取的字段
myproject/middlewares.py 项目的扩展中间件
myproject/settings.py 项目的设置文件
myproject/pipelines.py 定义项目的存储方案
myproject/spider 存放爬虫的文件夹

二、编写爬虫

1、使用命令去创建一个爬虫文件

使用scrapy genspider+文件名+域名,创建了一个名字叫做quotes的爬虫,并且能爬取的网页只会限制在quotes.toscrape.com这个域名下。
创建的文件中已经写好的代码有:

import scrapy
class QuotesSpider(scrapy.Spider):
    name = 'quotes'
    allowed_domains = [''quotes.toscrape.com'']
    start_urls = ['http://'quotes.toscrape.com'/']

    def parse(self, response):
        pass

当然,我们可以自己手动编写上述代码,不过使用命令更加方便。
如果我们需要创建一个自定义的Spider类时,该类必须继承至scrapy.spider,同时必须定义下面两个属性和两个个方法:
1、name:用于区别不同的Spider。该名字必须是唯一的,不可以重名
2、start_requests():包含了Spider在启动时进行爬取的URL列表,该方法必须返回Requests对象或者其生成器
3、parse():这是Spider的一个默认回调函数。当下载器返回response时,parse()就会被调用,每一个初始URL下载完成后生成的Response对象将会作为唯一的参数传入parse()。该方法负责解析返回的数据,提取数据(items),以及生成需要进一步处理的URL的Requests对象
4、allow_domains:允许的域名,爬虫只会爬取这个域名下的网页,其他不是这个域名下的网页会被自动忽略。

2、修改settings.py的代码

在使用爬虫前,修改settings的代码是必要的,比如说:
1、在DEFAULT_REQUEST_HEADERS中加上User-Agent参数
2、ROBOTSTXT_OBEY设置为False。默认是True。即遵守机器协议,那么在爬虫的时候,scrapy首先去找robots.txt文件,如果没有找到。则直接停止爬取。

3、实例

爬取前十页的内容:

import scrapy
class QuotesSpider(scrapy.Spider):
    name = 'quotes'
    allowed_domains = [''quotes.toscrape.com'']
    # start_urls = ['http://'quotes.toscrape.com'/']

    def start_requests(self):   #提供url请求
        start = 'http://quotes.toscrape.com/page/'
        for index in range(1,11):   #发送给下载器的url并指定数据的处理对象
            url = start+str(index)+'/'
            yield scrapy.Request(url=url,callback = self.parse)

    def parse(self,response):  #处理数据,每一个response都会进行一次处理,在这个例子中会处理十次
        page = response.url.split('/')[-2]
        file_name = 'quotes-%s.html' % page
        with open(file_name,'wb') as f:  #要使用二进制的方式写入,否则可能会乱码
            f.write(response.body)
        self.log('Save file %s' % file_name)

三、爬取

进入项目文件夹,使用命令scrapy crawl quotes就可以进行爬取,得到了如下图所示的十个文件。


命令中的quotes是自定义的爬虫名称

https://www.jianshu.com/p/b2ca839afdb2
http://fishc.com

你可能感兴趣的:(py 第二十九天 Scrapy爬虫框架2:创建项目)