输入关键字 抓取所有网页(关注回复“书籍”即可获赠Python从入门到进阶共10本电子书)
优采云 发布时间: 2021-11-22 13:05输入关键字 抓取所有网页(关注回复“书籍”即可获赠Python从入门到进阶共10本电子书)
点击上方“Python爬虫与数据挖掘”关注
回复“books”即可领取Python入门到高级共10本电子书
今天
日
鸡肉
汤
有清明漫天,下有绿水波。
/前言/
在上一篇文章中:我们已经获得了文章详情页的链接,但是提取URL后,如何发送给Scrapy下载呢?下载完成后,我们如何调用自己定义的解析函数呢?这时候就需要Scrapy框架中的另一个类Request。具体教程如下。
/具体实现/
1、 这个Request存放在scrapy.http下,如下图,直接导入即可。
我们需要把这个Request对象交给Scrapy,然后Scrapy爬虫框架会帮我们下载。
2、Request对象中,有初始化参数url和回调函数callback。当然,还有其他参数,这里就不解释了。我们将获取到的文章链接URL传递给这个初始化参数url,然后就可以构造Request了。这里需要注意的是,这个Request是文章的详情页,不是文章的列表页。对于文章详情页,那么我们需要提取每个文章的具体信息。
3、基于前面文章的铺垫,为了提取网页的目标信息,可以将提取的目标信息的表达部分封装成一个函数parse_detail(),作为提取文章特定字段的回调函数。下面是一个 CSS 选择器的例子,如下图所示。如果你想用 Xpath 选择器提取,没有问题。具体实现请参考文章历史文章中CSS和Xpath选择器的使用。具体实现过程这里不再赘述。
4、 之后我们会完善Request类,增加回调参数。记得在parse_detail前加上self,表示在当前类中,否则会报错。另外,虽然 parse_detail 是一个函数,但是这里一定不要加括号。这是回调函数的特性。
5、 细心的朋友可能已经注意到,上图中Request类中的URL部分非常复杂,添加了parse.urljoin()函数。其实这也是一个小技巧。在这里简单说一下。希望对朋友有帮助。 parse.urljoin() 函数的作用是将相对地址组合成一个完整的url。有时网页标签向我们展示的不是完整的URL链接或完整的域名,而是省略了网页的域名。如果没有域名,则默认域名为当前网页的域名(response.url)。这时候就需要将URL拼接起来,形成一个完整的URL地址,方便正常访问。
6、Request类初始化后,如何交给Scrapy下载?其实很简单,在前面输入一个yield关键字,它的作用就是把Request to Scrapy中的URL交给下载。
至此,解析列表页中文章的所有URL并交给Scrapy下载的步骤已经完成。接下来我们需要做的是如何提取下一页的URL并交给Scrapy下载。下一篇文章将重点解决这个问题,敬请期待~~~
/摘要/
本文基于Scrapy爬虫框架,使用CSS选择器和Xpath选择器解析列表页面中所有的文章 URL,并交给Scrapy下载。至此,数据采集的基本功能已经完成。下一篇文章将完成如何提取下一页的URL并发送给Scrapy下载,敬请期待。
如果想进一步了解Python,可以参考学习网站:点击阅读原文,可以直达~
-------------------结束-------------------