【问题标题】:Parsing bot protected site解析机器人保护站点
【发布时间】:2018-09-19 06:26:17
【问题描述】:

我正在尝试解析网站“https://ih.advfn.com/stock-market/NYSE/gen-electric-GE/stock-price”并从其董事会提取其最新消息。它受到 Cloud-flare 的 bot 保护。我正在使用 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 解析器,因为该站点会检测并阻止我的脚本。 我的问题是: 如何解析网页以拉取表格数据?

我可以提一下,这是针对我正在学习的安全课程的。我不是出于恶意原因使用它。

【问题讨论】:

  • 你没有。或者你不应该。如果一个网站正在努力开发反抓取机器人,这意味着他们不希望人们抓取他们的数据。如果他们不提供 API,请不要在未经他们同意的情况下抓取他们的网站。至于你的问题,在这个网站上要求教程是题外话。
  • 你怎么知道它会阻止你的脚本?你怎么知道它不起作用?它可能正在运行一些javascript。你需要像Selenium 这样的东西。
  • 我没有将它用于任何类型的项目。我正在用它来练习。
  • 我想熟悉爬虫检测和预防的概念。 @MooingRawr
  • 他们似乎在使用 Angular 的数据绑定,我建议你尝试不同的方法,比如拍摄网站的快照link

标签: python parsing web-scraping


【解决方案1】:

有多种方法可以绕过站点保护。您必须确切了解他们是如何阻止您的。

阻止请求的一种常见方法是查看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

【讨论】:

    猜你喜欢
    • 2022-08-04
    • 1970-01-01
    • 1970-01-01
    • 2021-04-28
    • 2010-09-13
    • 1970-01-01
    • 1970-01-01
    • 2021-05-08
    • 1970-01-01
    相关资源
    最近更新 更多