描述流程:
上面的一段代码,表示查找以初始链接start_urls 初始化Request对象。
(1)翻页规则
该Request对象必须满足Rule第一条规则,从https://www.ABCD.XX/page/1这个初始链接的页面中获得类似于https://www.ABCD.XX/page/XXX的链接,一直到结束。
(2)页面响应规则
在此期间,从https://www.ABCD.XX/page/XXX这种链接中获取https://www.ABCD.XX/XXX.html的链接,然后调用回调函数parse_xxx,在这个回调函数中下载response从而通过xpath语法获取title。
1、从referer链接获取类似的链接【(1)的实现】;2、从referer链接获得下一层的链接,从而获得title,已经打印了出来【(2)的实现】
在rules中,设置了两条规则
.+的意思是前面任意个字符,不加.+则默认,前缀是站点链接https://www.ABCD.XX/
(1)第一条规则的allow:.+page/\d
作用是从原始链接(refer link你所寻找到的链接的来源链接地址)一直匹配到获取https://www.ABCD.XX/page/这个字符串为止,后面的\d才是关键,只要有数字即可,综合两者就形成了链接:https://www.ABCD.XX/page/XXX,fellow=True的作用时,每更换一个refer link,在这个链接中就要去寻找满足第一条规则的链接,周而往复,找完为止。
(2)第二条规则的allow:.+\d.html
从你的refer link中匹配到https://www.ABCD.XX这个字符串,后面的\d才是关键,只要有数字即可,综合两者就形成了链接:https://www.ABCD.XX/XXX.html,然后将这个Request对象,调用回调函数,下载Response的对象,进而获得你所需要的数据。
以上rules对allow的解释是相对路径,绝对路径老失败就不谈了!!!
关于rule中LinkExtractors的更多规则解释:请见链接https://scrapy-chs.readthedocs.io/zh_CN/1.0/topics/link-extractors.html
这个爬虫项目完美的翻页Rule是
rules = ( #Rule(LinkExtractor(allow=r'page/\d'), follow=True), #每次只取下一页,,xpath的语法避免了取到最后一页,前一页或者下一页之前的页码! Rule(LinkExtractor(restrict_xpaths=("//div[@class='pagination']/*[not(@class='extend')][last()]")),follow=True), #详情页面链接迭代器 #Rule(LinkExtractor(allow=r'\d\.html'),callback="parse_xxx",follow=False) #xpath找到详情页面的所有满足条件的a标签对象形成列表,但是scrapy将其变为识别为迭代器用 Rule(LinkExtractor(restrict_xpaths=("//div[@class='thumbnail']/a[@class='zoom']")),callback="parse_xxx") )注:年轻就要多读书!!!