输入关键字 抓取所有网页(关注回复“书籍”即可获赠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,可以参考学习网站:点击阅读原文,可以直达~

  -------------------结束-------------------

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线