scrapy中文手册笔记(一)

来源:互联网 发布:新浪云数据库怎么连接 编辑:程序博客网 时间:2024/05/22 12:52

scrapy模块的spider
1、spider
spider类,定义爬取行为。开始运行的时候,用初始的URL,来初始化Request,并且设置回调函数,默认为parse函数。当request下载完毕且返回时,生成一个response,然后将response作为参数传递给回调函数。
spider中初试的request是通过调用start_requests()来获取的,start_requests()读取start_urls中的url,并以parse为回调函数生成Request。
在回调函数内分析返回的内容,返回item对象,或者request,或者包含二者的,一个可迭代容器。在回调函数内可以使用自带的选择,selector来分析网页内容,并根据分析的数据,生成item。也可以使用其他的bs4,或者lxml等库。
最后,生成的item进行存储或者其他处理(例如在pipelines中)。
具体运行的spider格式可以使用模版快速创建,scrapy genspider -t basic myspider 允许爬取域名。sipder格式如下:

import scrapy#导入处理数据的那个itmes类from myproject.items import myitemclass myspider(scrapy.spider):    #爬虫名字    name = "myspider"    #允许爬取的域名    allowed_domains = ['域名']    #开始爬取的初始链接    start_urls = [url1,url2....]    #回调函数parse,传入response,并且使用itmes类来结构化数据    def parser(self,response):        #实例化items的数据结构化的那个类,并且输入进数据        item = myitem()        item["..."] = ..        ...

2、spider的参数传递
如果要运行的爬虫,爬取的网址,不再start_urls中,而是需要在运行爬虫的时候自行设定(或者限制爬取网站的内容,例如允许爬取的域名),那么就需要给运行的spider传入参数。启动爬虫时使用命令:scrapy crawl spidername -a 参数名= 参数值.

import scrapy#导入处理数据的那个itmes类from myproject.items import myitemclass myspider(scrapy.spider):    name = "myspider"    allowed_domains = ['域名']    #由于传入了起始链接,所以默认的开始链接列表并不起作用    start_urls = [url1,url2....]    def __init__(self,startUrl=None,*args,**kwargs):        super(myspider,self).__init__(*args,**kwargs)        self.start_urls = [startUrl]    def parser(self,response):        #实例化items的数据结构化的那个类,并且输入进数据        item = myitem()        item["..."] = ..        ...        #暂不详细讨论

3、内置的spider
scrapy提供了很多内置的spider,根据具体情况,来为我们提供继承
(1)Spider
class scrapy.spider.Spider,是所有的spider的基类,所有的sipder必须继承这个基类,无论是模板还是自己写的spider。

(随笔感想,未完待续…)

原创粉丝点击