解析机器人受保护的网站

时间:2018-04-09 19:06:57

标签: python parsing web-scraping

我正在尝试解析网站“https://ih.advfn.com/stock-market/NYSE/gen-electric-GE/stock-price”并从其主板上提取最新消息。它受到Cloud-flare的机器人保护。我正在使用python及其相关库,这是我到目前为止所拥有的

from bs4 import BeautifulSoup as soup #parses/cuts  the html
import cfscrape
import requests
url = 'https://ih.advfn.com/stock-market/NYSE/gen-electric-GE/stock- 
price'

r=requests.get(url)
html = soup(r.text, "html.parser")
containers = html.find("div",{"id":"bbPosts"})
print(containers.text.strip())

我无法使用html解析器,因为该站点会检测并阻止我的脚本。 我的问题是: 如何解析网页以提取表数据?

谢谢。

1 个答案:

答案 0 :(得分:0)

有多种绕过站点保护的方法。你必须确切地看到他们是如何阻止你的。

阻止请求的一种常见方法是查看User Agent标头。客户端(在您的情况下是requests库)将通知服务器它的身份。

一般来说,浏览器会说I am a browser而图书馆会说I am a library。然后,服务器可以说I allow browsers but not libraries to access my content

但是,对于这种特殊情况,您可以通过发送自己的User Agent标题来欺骗服务器。

您可以在此处看到example。尝试使用您的浏览器用户代理。

其他阻止技术包括ip范围。绕过此方法的一种方法是通过vpnThis是设置最简单的vpns之一。只需在亚马逊上启动一台机器,让这个容器运行。

还有什么可能发生,您可能会尝试访问未呈现为服务器端的单页应用程序。在这种情况下,您应该收到的get个请求是一个非常小的html文件,它本质上引用了一个javascript文件。如果是这种情况,您需要的是以编程方式控制的实际浏览器。我建议你看看Google Chrome Headless,但还有其他人。您也可以使用Selenium

网络抓取是一个美丽但非常深刻的主题。我认为这些指针应该让你朝着正确的方向前进。

另外,作为一个快速提及,我的建议是避免from bs4 import BeautifulSoup as soup。我建议html2text