Hi!请登陆

[python]不可不知的Scrapy框架爬取下一层网页资料实作-第十篇

2021-3-12 26 3/12

想要进行资料分析,除了利用Python网页爬虫搜集第一层的网页资料外,有时候为了要更了解资料的内容或是让分析的结果更精确,就会需要爬取下一层的网页,也就是详细资料。

举例来说,笔者想要对不同品牌的笔记本进行分析,这时候使用Python网页爬虫已经取得网页第一层的笔记本名称外,还需要爬取每个笔记本的下一层网页,来取得详细的规格内容,才有办法进行比较。

本文将延续[python]Scrapy框架结合Gmail寄送爬取资料附件秘诀-第九篇文章的Scrapy专案,以INSIDE硬塞的网路趋势观察网站首页的热门文章为例,来和大家分享如何在Scrapy框架中爬取下一层的网页内容。实作的步骤如下:

Scrapy框架建立网页爬虫Scrapy网页爬虫爬取下一层网页内容Scrapy框架建立资料模型封装资料

一,Scrapy框架建立网页爬虫

首先,前往INSIDE硬塞的网络趋势观察网站,可以看到热门文章如下图:

这时候想要搜集红索引的五篇热门文章摘要,就需要分别前往下一层网页的联结来进行爬取。在热门文章标题的地方点击滑鼠快捷键,选择“检查”,可以看到HTML原始编码如下图:

其中标签就是等一下Scrapy网页爬虫所要前往的下一层网页网址。为了让本文的教学简单易懂,大家在上一篇文章的Scrapy专案中,通过以下的指令来另外建立一个新的Scrapy网页爬虫(hot_news):

$scrapy genspider hot_news www.inside.com.tw。里面。com 。tw

这时候Scrapy专案的spiders资料夹下就会多了一个一个Scrapy网页爬虫(hot_news),如下图:

二,Scrapy网页爬虫爬取下一层网页内容

开启Scrapy网页爬虫档案(hot_news.py),可以看到如下范例:

接下来,在parse()方法(方法)的地方,通过Scrapy框架的xpath()方法(方法),来爬取INSIDE硬塞的网路趋势观察网站的所有热门文章下一个网页网址,如下范例:

详细的Scrapy的xpath定位元素方法教学可以参考[python]掌握Scrapy框架重要的XPath定位元素方法-第五篇文章。取得了所有热门文章的下一层网页网址后,就可以透过回圈来进行请求,如下范例:

其中Request方法(Method)的第一个参数,就是“请求网址”,也就是热门文章的下一层网页网址,而第二个参数就是请求该网址后,所要执行的方法(Method),而parse_content则是笔者自订的方法名称,所以接下来就需要进行方法的定义,如下范例:

而parse_content()方法(方法)中,就是来爬取热门文章的下一层网页内容,以本文为例就是包含“文章标题”及“文章摘要” ,如下图:

在文章标题的地方点击滑鼠右键,选择“检查”,可以看到HTML原始码如下图:

接着,就可以可以在parse_content()方法(Method)中,同样使用Scrapy框架的xpath()方法(Method),来爬取「文章标题」及「文章摘要」,如下范例:

利用以下的指令执行Scrapy网页爬虫:

$scrapy crawl hot_news

截取部分执行结果如下图:

从上图可以看到,所有热门文章的下一层网页内容(文章标题与摘要)皆成功的爬取到了。

三,Scrapy框架建立资料模型封装资料

在Scrapy网页爬虫获取资料后,为了能够进行后续的处理,像是存入资料库,汇出档案或邮寄资料等,就需要将资料封装在Scrapy的资料模型(ITEM),传递给资料模型管道( ITEM PIPELINE)来进行处理。

所以,开启资料模型档案(items.py),自行命名一个HotNewsItem类别(Class),并且定义两个属性栏位,分别为「文章标题」及「文章摘要」,如下范例:

完成后,开启Scrapy网页爬虫档案(hot_news.py),在parse_content()方法(Method)中,建立Scrapy资料模型(HotNewsItem),并分别指定爬取到的栏位值,如下范例第2732行:

截取部分执行结果如下图:

从中可以看到,每笔资料皆被封装到Scrapy的资料模型(ITEM)中,接下来,就能够在资料模型管道(ITEM PIPELINE)做后续的资料处理了。

四,小结

本文利用简单的范例,让大家了解如果想要更进一步爬取下一层的网页资料,则可以在Scrapy框架中先爬取所有下一层网页的连结,然后通过Request()方法(Method)非同步的发送请求,最后即能自订方法(方法)来爬取所需的下一层网页资料。希望本文的实作教学有帮助到大家,如果有更好的技巧或想法,欢迎在底下留言和我分享。

#python#

相关推荐