scrapy野蛮式爬取(将军CrawlSpider,军师rules)

    如果将Spider比作scrapy爬虫王国的一个元帅,那CrawlSpider绝对是元帅手底下骁勇善战的将军。而其rules,便是善于抽丝剥茧的军师。

以下便记录以下一个CrwalSpider的作战过程。

1、    首先创建scrapy项目

                                       python      -m      scrapy   startproject    项目名称

2、    创建CrawlSpider

                                       python       -m      scrapy genspider    -t    crawl     蜘蛛名     域名

    python     -m  详细内容可见                https://zhuanlan.zhihu.com/p/91120727

此时我们便已经创建好了基础的CrawlSpider

scrapy野蛮式爬取(将军CrawlSpider,军师rules)_第1张图片

其中项目中的域名与起始url我们都可以自己手动修改。我们可以将不同的url入口放在start_urls中列表中,从而从不同起点开始爬取整个网站。爬虫开始后首先从start_urls列表中提取开始请求的url,然后其解析的response交给rules,rules通过LinkExtractor中的各种筛选url的方式,挑选出我们想要请求的url,,自动请求后将response通过callback返回给相应的回调函数。从而解析出我们想要的内容。

3、Rule里边参数解析

1、 LinkExtractor

LinkExtractor筛选方式:

其具体参数有:(可查看scrapy官方文档,搜索关键词:LinkExtractor)

scrapy野蛮式爬取(将军CrawlSpider,军师rules)_第2张图片

主要用到:

1、 allow    定义从start_url请求来的response中哪些链接使我们要的。其为一个正则表达式或者正则表达式列表形式写出。

                      如: allow=r'http.*?.html' ,可以描述为允许提取http.............html类似的链接。

2、restrict_xpaths('')     直接放入表达式即可

3、restrict_css('')        如: 可表述为:只要id为mainbody里的ul里的li里的a里边的链接。

其余方法看需要使用。LinkExtractor中可以使用多个筛选方式,用 “,”隔开即可

2、 callback

callback 将把LinkExtractor解析出来的链接请求之后的response回调给一个函数。函数接收该response后即可直接解析内连接内容。

注意:callback不可回调给parse。此处 parse已被默认去做了其它事情。如果重新定义一个parse来接受response,爬虫将可能无法工作。

3、cb_kwargs

它是一个字典格式的数据,里边包含了要传给回调函数的参数,

4、process_links

根据LinkExtractor中的条件过滤链接。

5、 process_request

 去请求url

本人刚学习scrapy,所以了解不是很深。我现在的理解是process_links是用来根据LinkExtractor筛选出链接,然后process_request去请求这些筛选后的链接,最后得到的response通过callback回调给相应函数,从而进行下一步对数据的处理。(如果理解不对,请大家指正。谢谢!)

通过定义一个Rule我们便可以实现当前页面的所有详情页的请求,如果再定义一个Rule去把其他页面的url提取出来便可以实现网页垂直与横向爬取。从而一步步爬完整个网站。

另外发现rules的强大之处,其不需要我们再去构造完整的url。它可以结合我们的域名再结合提取的网页的相对地址,自动构造出完整的url。从而去实现更为方便的爬取。这也是算是比较惊喜的一个地方。

 

最后总结一下,CrawlSpider,通过start_urls制定爬取起点,通过rules制定两个(或多个)Rules规则,通过callback回调,便可以实现网页的深度、广度爬取。同时能够使我们对想要爬取的部分作出更为清晰的定义,其自动构造url的绝对路径能够极大的简化传统spider中url构造部分。

                                                          

                                                                                                                                                                         PS:小胖胖的猪崽

你可能感兴趣的:(爬虫)