【问题标题】:Scrapy: how can I get the content of pages whose response.status=302? [closed]Scrapy:如何获取 response.status=302 的页面内容? [关闭]
【发布时间】:2015-05-13 06:50:44
【问题描述】:

我在爬取时得到以下日志:

DEBUG: Crawled (302) <GET http://fuyuanxincun.fang.com/xiangqing/> (referer: http://esf.hz.fang.com/housing/151__1_0_0_0_2_0_0/)
DEBUG: Scraped from <302 http://fuyuanxincun.fang.com/xiangqing/>

但它实际上什么也没返回。 我该如何处理这些 status=302 的响应?

任何帮助将不胜感激!

【问题讨论】:

  • 顺便说一句,Scrapy 会自动处理这些,如果你把它排除在 handle_httpstatus_list 之外。

标签: web-scraping scrapy scrape scrapy-spider


【解决方案1】:

HTTP 状态 302 表示已临时移动。当我对 url http://fuyuanxincun.fang.com/xiangqing/ 发出 HTTP GET 请求时,它向我显示 HTTP 200 状态。通常,服务器在发送 302 状态码后不会发送任何内容(尽管技术上在 302 之后发送数据是可能的)。

您获得 HTTP 302 状态的原因可能是以下之一:

  1. 当存在特定引用者(例如:http://esf.hz.fang.com/housing/151__1_0_0_0_2_0_0/)时,网站不会提供其内容。
  2. 您没有发送服务器想要查看的 HTTP 标头。例如像某个用户代理。网站可以通过发送 HTTP 302 状态而不是 HTTP 200 状态来决定拒绝没有特定标头的请求。
  3. 您尝试从中发送请求的特定 IP 地址被您尝试收集的网站排除在外。

我建议:

  1. 使请求看起来像一个“真实的”浏览器请求(传达类似的标头)。
  2. 尝试从另一个 IP 地址发送请求。
  3. 尝试使用(随机)用户代理发送请求。

我在 UTC 时间 2015 年 5 月 13 日星期三 07:30:29 提出了请求,网站的行为可能会在您和我的请求之间发生变化。

发布完整的 RAW HTTP 请求和响应也很有帮助。

【讨论】:

  • 谢谢你的具体解释,小矮人!这真的很有帮助,因为我对 HTTP 知之甚少。我使用了一些用户代理和 IP 地址,但我无法确定我的所有用户代理是否都有效。你知道如何测试用户代理吗?
  • 您可以尝试使用不同的用户代理执行一些请求。并检查请求之间的 HTTP 响应标头/状态码是否不同。这并不理想,但它可以为您提供潜在用户代理问题的指示。
猜你喜欢
  • 1970-01-01
  • 2022-08-18
  • 1970-01-01
  • 1970-01-01
  • 2018-01-02
  • 2018-01-28
  • 1970-01-01
  • 1970-01-01
  • 2012-02-13
相关资源
最近更新 更多