【问题标题】:Anyway to scrape a link that redirects?无论如何要抓取重定向的链接?
【发布时间】:2017-05-09 16:15:25
【问题描述】:

无论如何我可以让 python 点击​​一个链接,比如 bit.ly 链接,然后抓取生成的链接?当我抓取某个页面时,我唯一可以抓取的链接是一个重定向的链接,它重定向到的地方就是我需要的信息所在的位置。

【问题讨论】:

  • 是的。但是,如果我们不更准确地知道它的作用,我们不知道如何修复您的程序。请提供一个简短(五行或六行)完整程序来演示您的问题。 Edit 你的问题包括整个minimal reproducible example。谢谢!
  • requests 自动执行HTTP 重定向,并将所有网址的信息保存在r.history 中。如果页面使用HTML 重定向(在<meta> 标记中),那么您可以轻松找到它并将requests 与此url 一起使用。 requests 不能只重定向 JavaScript 重定向,因为它不执行 JavaScript,而且可能有太多可能的重定向方法无法在代码中找到 url。

标签: python parsing web-scraping beautifulsoup lxml


【解决方案1】:

有 3 种类型的重定向

  • HTTP - 作为响应标头中的信息(代码为 301302、3xx)
  • HTML - 作为 HTML 中的标签 <meta>(维基百科:Meta refresh
  • JavaScript - 像 window.location = new_url 这样的代码

requests 执行HTTP 重定向并将所有网址保留在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

顺便说一句:所以不允许在文本中放置位链接,所以我使用了连接。

【讨论】:

  • 如果页面使用JavaScript,那么您可以使用Selenium(或类似模块)打开网络浏览器(它将执行页面上的所有JavaScript)并控制网络浏览器并获取数据,点击按钮等。
  • 如果您知道,该页面会重定向到带有?variant=33334400198 的 url,然后您可以分析 HTML 和 JavaScript 来找到它,并且每次都能从代码中获得新的价值。
  • 请详细说明?我无法抓取并找到与 ?variant=33334400198 和产品的相关性,因此将该字符串添加到 html 似乎是不可能的,Selenium 是完成获取该 url 的唯一方法吗?
  • 有时所有信息都在 HTML 或其他文件中,如 javaScripts 或由 AJAX/JavaScript 读取的数据,很难找到它。但是当你找到它时,你可以很容易地在代码中使用它。但如果找不到,则必须使用 Selenium 或其他可以执行 JavaScript 代码的工具/模块(即 PhantomJSPyQt WebKit widget)。
猜你喜欢
  • 1970-01-01
  • 2012-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-15
  • 2018-10-19
相关资源
最近更新 更多