[python]详解Scrapy框架爬取分页资料的实用技巧--第
相信大家在浏览网页的经验中,都有看过利用分页的方式来呈现,将内容切成好几页,除了能够提升网页的执行效率外,还可以增加了使用者的体验。
在前面的Scrapy网页爬虫框架系列教学中,都分享了爬取单一网页的内容,这时候如果想要利用Scrapy网页爬虫框架来爬取多页的资料,该如何实作呢?这里就来延续[python]教你Scrapy框架汇出CSV档案方法提升资料处理效率-第七篇文章的教学内容,一起来学习这个技巧吧。实作的步骤包含:
Scrapy专案建立网页内容爬取方法(方法)Scrapy定位网页的下一页按钮Scrapy爬取多页的网页内容
一,Scrapy专案建立网页内容爬取方法(方法)
首先,来回顾一下目前在Scrapy网页爬虫(spiders / )所建立的parse()方法(Method),如下范例:
进口沙皮类InsideSpider (刮y的。蜘蛛):名称=“内部”allowed_domains = [ '' ]start_urls = [ ' ]def parse (self ,response ):#爬取文章标题post_titles =响应。xpath (“ // h3 [@ class ='post_title'] / a [@ class ='js-auto_break_title'] / text()”)。getall ()#爬取发布日期post_dates =响应。xpath (“ // li [@ class ='post_date'] / span / text()”)。getall ()#爬取作者post_authors =回应。xpath (“ // span [@ class ='post_author'] / a / text()”)。getall ()对于数据在拉链(post_titles ,post_dates ,post_authors ):NewsScraperItem = {“ post_title” :数据[ 0 ],“ post_date” :数据[ 1 ],“ post_author” :数据[ 2 ]}产生NewsScraperItem
以上范例第1132行为爬取INSIDE硬塞的网路趋势观察网站-AI新闻的单一网页,为了提升其中爬取逻辑的重用性(可重复使用),此处将其独立成一个新方法(Method),如下范例:
进口沙皮 刮y的类InsideSpider (scrapy 。蜘蛛):名称= “内部”allowed_domains = [ '' ]start_urls = [ ' ]def parse (self ,response ):产量从自我。刮(回应)#爬取网页内容def scrape (self ,response ):#爬取文章标题post_titles =响应。xpath (“ // h3 [@ class ='post_title'] / a [@ class ='js-auto_break_title'] / text()”)。getall ()#爬取发布日期post_dates =响应。xpath (“ // li [@ class ='post_date'] / span / text()”)。getall ()#爬取作者post_authors =回应。xpath (“ // span [@ class ='post_author'] / a / text()”)。getall ()对于数据在拉链(post_titles ,post_dates ,post_authors ):NewsScraperItem = {“ post_title” :数据[ 0 ],“ post_date” :数据[ 1 ],“ post_author” :数据[ 2 ]}产生NewsScraperItem
由于爬取逻辑被独立为一个新方法(方法),这时候在parse()方法(方法)中,则需使用“ yield from”关键字来进行呼叫,并导致网页的响应结果(response),来执行网页资料的爬取,如上范例第11行。
二,Scrapy定位网页的下一页按钮
开启INSIDE硬塞的网路趋势观察网站-AI新闻,往下可以看到页码的区域如下图:
接下来,返回Scrapy专案的spiders / 档案,在parse()方法(Method)中,即可利用Scrapy框架的xpath()方法(Method),以“下一页”按钮的样式类别(class)来进行定位,如下范例第1415行:
进口沙皮 刮y的