Scrapy教程 - 3如何翻頁爬取更多資料
前言
上个教程2完成了一个单页的简单爬虫,但是在实际应用上,我们不会只需要单页的数据,而是多页的数据。因此在爬取多页面数据前,我们要先观察网站/网页的页面变化,才能知道如何有效地获取下一页。
觀察頁面
首先,看一下首页网址:
// 首頁網址
https://books.toscrape.com/catalogue/page-1.html
然后看一下第一页尾,可以发现总共有50页,而且点击右下next可以到下一页。
接着继续观察第二页,
// 第二頁網址
https://books.toscrape.com/catalogue/page-2.html
一样有next可以往下一页,另外还有previous可以回前一页
这里我们做一个小结就是,每一页在转换的时候,网址是随着页数在改变的
// 第1頁
...page-1.html
// 第2頁
...page-2.html
// 以此類推,第50頁
...page-50.html
如何翻頁
记得教程2的parse function吗? 我们要在这个function里面加上解析下一页按钮的链接,如有,我们就让爬虫继续执行;如没有,则停止爬取
def parse(self, response):
// page_num = 1
// 找所有書籍的url
books = response.xpath('//h3/a/@href').extract()
for book in books:
// 將網址前綴與後綴結合
url = response.urljoin(book)
yield response.follow(url = url,
callback = self.parse_book)
// extract 下一頁 url,並發出請求
next_page_url = response.xpath('//a[text()="next"]/@href').extract_first()
absolute_next_page_url = response.urljoin(next_page_url)
yield Request(absolute_next_page_url)