如何爬取一个重定向链接?

4

有没有办法让Python点击链接,例如bit.ly链接,然后抓取结果链接?当我正在爬取某个页面时,我只能抓取一个重定向链接,而重定向的页面上包含我需要的信息。


是的。但是如果我们不知道程序的详细情况,我们就不知道如何修复它。请提供一个包含完整问题的短(五到六行)程序。[编辑]您的问题以包括整个[mcve]。谢谢! - Robᵩ
requests 自动执行 HTTP 重定向并保留所有 URL 的信息在 r.history 中。如果页面使用 HTML 重定向(在 <meta> 标签中),那么您可以轻松地找到它并使用 requests 进行访问。requests 无法仅重定向 JavaScript 重定向,因为它不执行 JavaScript,并且可能有太多的重定向方法来在代码中查找 URL。 - furas
1个回答

11

有三种重定向方式

  • HTTP - 在响应头中提供信息(使用代码 301302、3xx)
  • HTML - 以标签形式出现在 HTML 的 <meta> 中(维基百科:元重定向
  • JavaScript - 以如下代码形式出现:window.location = new_url

requests 执行 HTTP 重定向并将所有 URL 保存在 r.history 中。

import requests

r = requests.get('http://' + 'bit.ly/english-4-it')

print(r.history)
print(r.url)

结果:

[<Response [301]>, <Response [301]>]
http://helion.pl/ksiazki/english-4-it-praktyczny-kurs-jezyka-angielskiego-dla-specjalistow-it-i-nie-tylko-beata-blaszczyk,anginf.htm

顺便提一下:SO 不允许在文本中放置 Bitly 链接,所以我使用了连接符。


如果页面使用JavaScript,那么您可以使用Selenium(或类似的模块)打开Web浏览器(它将执行页面上的所有JavaScript),控制Web浏览器并获取数据,单击按钮等。 - furas
如果您知道该页面重定向到带有“?variant=33334400198”的URL,那么您可以分析HTML和JavaScript以找到它,并且每次都可以从代码中获取最新值。 - furas
请详细说明一下?我无法抓取并找到那个 ?variant=33334400198 与产品之间的关联,因此将该字符串添加到HTML中似乎不可能,Selenium是实现获取该URL的唯一方法吗? - ColeWorld
有时候所有的信息都在HTML或其他文件中,比如JavaScript或通过AJAX/JavaScript读取的数据,这样就很难找到它们。但是一旦你找到了它们,就可以轻松地在代码中使用它们。但如果你找不到它们,那么你就必须使用Selenium或其他工具/模块(例如PhantomJSPyQt WebKit widget),这些工具/模块可以执行JavaScript代码。 - furas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接