自動翻頁分為兩種情況:此處所舉例子有一定的時效性,請具體情況具體分析,方法類似
(1)一種是像我之前爬蟲新京報網(wǎng)的新聞,下一頁的url可以通過審查元素獲得,第一頁的網(wǎng)址是http://www.bjnews.com.cn/news/list-43-page-1.html
在第一頁的時候,下一頁按鈕的審查元素是

我們通過獲取next_pages = response.xpath('//div[@id="page"]/a[@class="next"]/@href').extract()[0]
,便可以得到下一頁的url,next_page = "http://www.bjnews.com.cn" + next_pages,
這一部分的完整代碼為:
page_link=set() #保存下一頁頁面url
content_link=set() #保存頁面內(nèi)所有可獲得的url
rules={'page':LinkExtractor(allow=(r'^http://www.bjnews.com.cn/\w+/2016/\d{2}/\d{2}/\d{6}.html
))}start_urls={'http://www.bjnews.com.cn/news/list-43-page-1.html'}
def parse(self, response):
#爬取一個頁面內(nèi)的所有url鏈接
??? for link in self.rules['page'].extract_links(response):
??????? if link.url not in self.content_link:
??????????? self.page_link.add(link.url)
??????????? yield scrapy.Request(link.url, callback=self.parse_item)
#自動獲取下一頁的url
??? next_pages = response.xpath('//div[@id="page"]/a[@class="next"]/@href').extract()[0]
??? if next_pages:
??????? next_page = "http://www.bjnews.com.cn" + next_pages
??????? self.page_link.add(next_page)
??????? yield scrapy.Request(next_page, callback=self.parse)
(2)第二種情況,就是在下一頁的審查元素中沒有提供url鏈接,需要自己分析,在這里依然舉個例子,比如搜狐新聞http://news.sohu.com/guojixinwen.shtml,該頁中下一頁按鈕的審查元素是:

我們不能通過href來直接過得下一頁的url,需要自己手動獲得,那現(xiàn)在我們來分析
第二頁的url:http://news.sohu.com/guojixinwen_5230.shtml,第三頁的http://news.sohu.com/guojixinwen_5229.shtml,最后一頁的http://news.sohu.com/guojixinwen_5132.shtml,由此可以分析出這一共100頁的url,是http://news.sohu.com/guoneixinwen_"+i+".shtml",其中i是從5230到5132倒序排列的,也就是說通過for循環(huán),就可以獲得這100頁的所有url,完整代碼如下:在這里給大家加一個新的方法的使用start_request,該方法就是子定義start_urls,把所有自定義的url放到page_link中,self.make_requests_from_url方法會自動獲取里面的請求
page_link = set()
content_link=set()
rules = {'page':LinkExtractor(allow=(r'^http://news.sohu.com/\d{8}/\w+.shtml
))def start_requests(self):
for i in range(5230, 5133)[::-1]:
url = "http://news.sohu.com/guoneixinwen_"+str(i)+".shtml"
self.page_link.add(url)
for url in self.page_link:
yield self.make_requests_from_url(url)
}