Scrapy shell被301重定向到无参数的URL

6 投票
1 回答
3289 浏览
提问于 2025-04-18 09:07

Scrapy 是一个可以用来请求网址的工具,它可以通过 GET 参数来帮助我们查看网页的响应内容:

scrapy shell "https://duckduckgo.com/?q=foo"

不过,有些网站在我发出请求时,会出现 301 重定向的情况,这样网址的参数就被去掉了:

DEBUG: Redirecting (301) to <GET http://foo.com/mypage/> 
  from <GET http://foo.com/mypage/?bar=baz>
DEBUG: Crawled (200) <GET http://foo.com/mypage/> (referer: None)

当我在浏览器里正常访问 http://foo.com/mypage/?bar=baz 时,并不会被重定向,GET 参数也会保留。

有没有人能建议我怎么避免被重定向呢?

1 个回答

5

受到@paultrmbrth在评论中回答的启发,这里有一个具体的方法来解决这个问题,使用的是用户代理伪装

首先,你需要找到你浏览器的用户代理字符串(我使用了http://www.whatsmyuseragent.com/,但还有其他方法可以找到)。

我的用户代理字符串是

Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:31.0) Gecko/20100101 Firefox/31.0

接下来,在project_name/items.py文件中添加以下一行:

USER_AGENT = "whatever the user agent string was"

这样,运行scrapy shell "http://foo.com/mypage/?bar=baz"就能正常工作了。

撰写回答