Spiders
spiders是一些用来定义某个或某几个网站如何被抓取的类,包括如何执行爬取,如何从页面提取结构化的数据。换句话说,spiders是用来自定义爬取和解析行为的。
一个爬虫的过程基本过程为:
1. 从开始给定的URLs(可在start_urls中定义),默认使用start_requests()方法 发出最初的请求开始爬取,指定callback函数parse,用来处理对请求的响应;
2. 在callback函数中,parse响应response结果,返回一个整体的字典结构,其中包括要提取的数据,item对象,request对象,和这些对象的迭代。对于获取的request对象,会再次被请求和parse;
3. 在callback函数中,通常使用selectors来parse页面内容,来生成需要的items;
4. 最后,返回所有的items,并输出或储存在数据库中。
这个过程基本适合所有的爬虫,但对于Scrapy爬虫来说,因为不同的目的,绑定了几种不同类型的默认spiders。
scrapy.Spider
class scrapy.spiders.Spider
这是最简单的spider,其它的spiders都继承于该spider。他不提供任何特殊的功能性,仅实现了默认的start_requests(),即发送start_urls请求并调用parse来处理结果。
name
字符串。用于定义spider名字。该名字被scrapy调用,必须唯一。请注意。
如果spider爬取一个独立的域,通常会用域名来命令。如爬取mywebsite.com时,命名为mywebsite;
Note:Python2中,name仅支持ASCII码。
allow_domains
字符串列表,可选。如果offsiteMiddleware被enabled,不属于该域的URLs请求不会被执行。
如果目标URL是https://www.example.com/1.html
,可添加'example.com'
到列表中。
start_urls
URLs的列表,spider从这些URLs开始爬取。若后续有其他的URL需要访问,会通过这些URLs来生成。
custom_settings
字典。运行spider的时候,相关配置会被修改。他作为类的属性被定义,会在实例化之前更新。
crawler
该属性可通过from_crawler()类方法初始化来设置,会链接spider的crawler对象。
crawlers将很多组间封装为一个入口(如extensions,middlewares,signals managers等)。详细可参考Crawler API。
settings
运行spider的相关设置,是一个settings实例。
logger
log生成性,可用来添加日志。
from_crawler(crawler, *args,**kwargs)
Scrapy创建spiders的类方法。通常你不需要直接修改他,会通过_init_()方法默认实现,用给定的参数调用即可。此外,在新的实例中,这种方式可以设置crawler和settings的属性,在之后的spiders代码中可以进行访问。
参数说明:crawler :crawler实例----与spider绑定的crawler
args(list): 传递给__init__ ()方法的参数
kwargs(dict):传递给__init__()方法的关键字参数
start_requests()
这种方式可用来根据给定的URLs返回页面的迭代器。在spider已打开进行爬取时,被Scrapy调用。仅会被调用一次。
class MySpider(scrapy.Spider): name = 'myspider' def start_requests(self): return [scrapy.FormRequest("http://www.example.com/login", formdata={'user': 'john', 'pass': 'secret'}, callback=self.logged_in)] def logged_in(self, response): # here you would extract links to follow and return Requests for # each of them, with another callback passparse(response)
log(message[,level,component])
closed(reason)
当spider关闭时被调用。
不是很熟悉代码,这部分翻译还是存在一点问题。还是要变熟悉代码边看。