【问题标题】:How to get html from url using Python?如何使用 Python 从 url 获取 html?
【发布时间】:2019-05-21 02:46:43
【问题描述】:

我正在尝试关注this tutorial 以了解网络抓取。因为我使用的是 Python3,所以我一直在使用 urllib 而不是 urllib2 来尝试正确请求 URL:

from urllib import request
# tried import urllib
# tried import urllib.request

url = "http://www.bloomberg.com/quote/SPX:IND"
raw_html = request.urlopen(url)

似乎没有正确打开 URL,我会收到此错误:

urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed. 

我找到了一个潜在的解决方案,但帖子中没有提到这样的错误。

最后,我真的很想用 Python requests library

import requests

url = "http://www.bloomberg.com/quote/SPX:IND"
raw_html = requests.get(url)

# get in BeautifulSoup format
processed_html = BeautifulSoup(raw_html.content, "html.parser")
# print('processed_html = ', processed_html)
h1 = processed_html.findAll("h1")
print('h1 = ', h1)

问题是我只能取回“Bloomberg”h1 标签,但网页上还有其他 h1 标签。当我查看processed_html 时,有些标签和类不存在。

我真的很喜欢请求库问题的解决方案,但感谢任何帮助或指导。

【问题讨论】:

  • 是什么让你说有不止一个 h1 元素?查看包含快速 Ctrl-F 的链接的来源,这就是预期的结果
  • 尝试使用此标头获取请求{'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'}
  • @HunterLiu 我能够重现这一点,并且返回的 html 似乎表明彭博服务器正在检测“异常行为”,因此提供的页面与您访问时看到的页面不同浏览器。这是我在 HTML 中看到的错误“我们从您的计算机网络中检测到异常活动。要继续,请单击下面的框,让我们知道您不是机器人。”可能有助于查看 Selenium chrome webdriver 以规避此问题,但不能保证。

标签: python beautifulsoup python-requests urllib


【解决方案1】:

关于教程,您应该已经阅读:

抓取规则

在抓取之前,您应该查看网站的条款和条件 它。请仔细阅读有关合法使用数据的声明。 通常,您抓取的数据不应用于商业用途 目的。

现在要么a)本教程是在网站更新其服务条款之前不久编写的,b)他们已经获得了抓取网站的书面同意,或者 c)教程公然忽略了它自己的建议。我将怀疑服务条款自两年前撰写或获得书面许可以来已更改,但如果您阅读该网站的服务条款,您将阅读:

...您不得使用或试图使用任何 “爬虫”、“机器人”、“机器人”、“蜘蛛”、“数据挖掘”、“计算机代码”、 或任何其他自动化设备、程序、工具、算法、过程或 访问、获取、复制或监控任何部分的方法 服务,在服务上发现或通过服务访问的任何数据或内容, 或任何其他服务信息未经事先明确书面 BLP 的同意。您不得伪造标题或以其他方式操纵 标识符以掩盖任何其他内容的来源。

所以我建议找一个不同的网站来练习,它遵循相同的过程。

【讨论】:

  • 通常网站抓取道德规定在 robots.txt 中,据我所知,Bloomberg 网站可以抓取,因为用户代理具有通配符名称
  • @osonuyi 那么这些道德规范只能在您征得他们同意的情况下适用。服务条款明确规定未经事先明确书面同意不得进行抓取。
  • 是的,实际上是一个好点——这里有一个关于这个主题的相关 stackexchange,其中包含更多详细信息以供将来参考:law.stackexchange.com/questions/58817/…
猜你喜欢
  • 1970-01-01
  • 2019-06-06
  • 2014-11-25
  • 1970-01-01
  • 1970-01-01
  • 2015-05-09
  • 2021-04-03
  • 2016-01-17
  • 2011-03-05
相关资源
最近更新 更多