欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【Scrapy 框架翻译】爬虫页(Spiders)详解篇

程序员文章站 2022-05-08 16:47:21
...

版本号:Scrapy 2.4

内容介绍

spider文件夹下是每个要执行的py爬虫文件,通过命令行执行的方式执行该文件夹下的py脚本,实现数据抓取的业务内容。

spider类参数解释

创建spider内容的命令

scrapy genspider xxxxx xxxxxx.com
  1. name
    爬虫文件生成的实例化对象名,通过命令行生成,执行脚本的时候是通过这个名称执行,不需要修改,在一个爬虫项目里必须是惟一的。
name = xxxxx # 这里对应的是命令行的第三部分
  1. allowed_domains
    允许爬取的域名,可选项。如果设置了域名则非域名下的url无法处理。
allowed_domains = []
allowed_domains = ["https://xxxxxx.com",] # 这里对应的是命令行的最后一部分
  1. start_urls
    需要处理的url列表,通过spider基类的start_requests方法遍历请求。
    后续在爬虫管理的内容部分会介绍具体在管理方面重写该部分的内容。
start_urls = [
	'http://aaaa/',
	'http://bbbb/',
	'http://cccc/',
]
  1. custom_settings
    专属的spider配置,如果重写此设置会覆盖项目全局的设置,而且必须定义成类变量。建议统一在settings中设置便于管理。不要在此处修改。
  2. crawler
    spider类的crawler对象,用于获取settings配置信息中的设置,例如middlewares、pipline等中的设置。
    默认不需要修改。
  3. settings
    Settings实例,读取统一配置settings中的信息。
    默认不需要修改。
  4. logger
    用于发送数据抓取过程中的项目日志。
    默认不需要修改。
  5. from_crawler
    Scrapy用来创建spider类的方法。
    默认不需要修改。
@classmethod
def from_crawler(cls, crawler, *args, **kwargs):
    spider = cls(*args, **kwargs)
    spider._set_crawler(crawler)
    return spider
# 创建一个实例的对象
def __init__(self):
    #实例化一个浏览器对象(实例化一次)
    self.bro = webdriver.Firefox(executable_path=chrm,options =options )
  1. start_requests()
    生成初始请求,默认使用start_urls列表中的的url来构造request,而且request是get请求。
    如果需要使用post方法、或者参数传递,需要重写start_requests方法。
  2. parse
    Scrapy使用的默认回调,用于处理数据的部分,可以自定义各种名称的parse方法用于数据抓取。
    def start_requests(self):
        parse_list = [
            self.parse1,
            self.parse2,
        ]

        # 非API接口方法
        for list_num in range(len(self.start_urls)):
            for url_num in range(len(self.start_urls[list_num])):
                yield scrapy.Request(url=self.start_urls[list_num][url_num],
                                     meta={'channel_name': self.channel_name_list[list_num][url_num],
                                           'type_id': self.type_id_list[list_num][url_num]},
                                     callback=parse_list[list_num])
                                    
    def parse1(self, response):
    	......
    def parse2(self, response):
    	......
  1. closed
    爬虫关闭的方法。
    #必须在整个爬虫结束后,关闭浏览器
    def closed(self,spider):
        print('爬虫结束')
        self.bro.quit()