网页抓取解密(Response.spiders.Selector.Spider.start_urls核心工作流程)

优采云 发布时间: 2021-10-13 17:35

  网页抓取解密(Response.spiders.Selector.Spider.start_urls核心工作流程)

  环境准备:使用pip安装lxml和scrapyscrapy startproject amazon_comment,创建一个名为amazon_comment的scrapy爬虫项目。 scrapy的核心工作流程:在scrapy.spiders.Spider中有一个变量start_urls,它是一个数组类型,表示我们需要让爬虫从哪些链接开始爬取。 Spider会使用start_urls中的链接,用默认的回调函数parse生成一个Request,然后使用链接进行HTTP请求,获取HTTP响应内容,封装成Response对象,然后将Response对象作为参数传递到回调函数解析。 Spider 中的第一个 Request 是通过调用 start_requests() 方法获得的。 start_requests() 方法默认由 Spider 实现。我们一般不需要实现这个方法。在start_requests()方法中,Request请求是通过读取start_urls中的链接生成的,默认使用parse作为回调函数。获得Response对象后,我们可以重写回调函数:parse方法,或者在生成Request时指定我们想要的任何回调函数。

  这样,Response就会作为参数传入我们指定的回调函数中(默认是parse方法)。然后,我们就可以在我们设置的回调函数中从Response对象中解析返回的网页header内容和网页body内容。最常见的就是使用scrapy提供的scrapy.selector.Selector从网页正文中提取我们想要的网页内容。我们设置的回调函数可以返回一个Item对象,或者一个dict,或者一个Request对象,或者一个收录这三样东西的可迭代对象。在使用 Selector 提取网页内容时,最常见的一种是使用 xpath 语法在网页中定位和提取我们想要的数据。如果回调函数返回一个Request对象,那么这个Request对象会被Scrapy处理(发送请求,得到Response,传递给回调函数进行处理)。如果我们设置的回调函数返回的是Item对象,那么scrapy会将Item传递给我们在scrapy中定义的Item Pipeline进行处理。因此,我们一般要实现ItemPipeline。最常见的是将 Item 对象放入 Item Pipeline 中。格式化成我们想要的格式,然后持久化到数据库中。

  

  当我们实现scrapy.spiders.Spider时:

  如果不需要登录,不需要设置header,而且只通过一个URL就可以访问一个网页,那么在scrapy.spiders的Spider类中,可以覆盖解析(响应)方法。

<p>如果不需要登录,需要设置header(一般设置User-Agent和Referer),以及通过url可以访问的网页,然后重写parse(response)方法,然后在scrapy.spiders的Spider类中,重写start_requests()方法,返回一个scrapy.http.Request对象,在该方法中设置了headers参数。 Request 对象还可以设置回调。如果设置了回调,start_requests方法返回Request对象后,scrapy会根据Request发起请求,获取scrapy.http.Response对象,然后将Response对象作为参数传递给回调方法,然后执行回调方法;如果没有设置回调,那么scrapy会根据Request发起请求,获取scrapy.http.Response对象,然后将Response对象作为参数传递给parse方法,然后执行parse方法。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线