Python - 如何在抓取时欺骗反广告拦截过滤器?

Python - how to trick anti adblock filter while scraping?

我正在尝试使用 python urllib 下载网站的内容,但我遇到了问题,因为该网站有一个 addblock 过滤器,我唯一能得到的是要求我禁用 addblock 的文本。 ..有什么办法可以欺骗这种过滤器吗? 提前致谢。 (:

Javascript 解析

您 运行 遇到的问题是一个 JavaScript 过滤器,它会在页面加载后加载数据。警告您正在使用 adblock 的消息存在于原始 HTML 中并且是完全静态的。当 JavaScript 调用能够验证 adblock 存在或不存在的位置时,它会被替换。有几种方法可以解决这个问题,但是每种方法都需要找到某种加载方式 JavaScript.

解决方案

您的问题有多种解决方案。您可以阅读更多关于它们的信息 here

  1. Embed a web browser within an application and simulate a normal user.
  2. Remotely connect to a web browser and automate it from a scripting language.
  3. Use special purpose add-ons to automate the browser
  4. Use a framework/library to simulate a complete browser.

如您所见,每一个都以某种方式需要模拟浏览器和 DOM 对象。由于有多个库可以帮助您完成此操作,因此我强烈建议您查看上面的 url。

以下是来自同一页面的代码示例,展示了如何在通过 JavaScript 生成 URL 的页面上检索 URL。它依赖于 gargoylesoftware 的库。

import com.gargoylesoftware.htmlunit.WebClient as WebClient
import com.gargoylesoftware.htmlunit.BrowserVersion as BrowserVersion

def main():
   webclient = WebClient(BrowserVersion.FIREFOX_3_6) # creating a new webclient object.
   url = "http://www.gartner.com/it/products/mq/mq_ms.jsp"
   page = webclient.getPage(url) # getting the url
   articles = page.getByXPath("//table[@id='mqtable']//tr/td/a") # getting all the hyperlinks

if __name__ == '__main__':
   main()

不过,

我不确定您为什么要抓取网页,或者您是从哪个网站抓取的。但是,自动收集此类数据违反了各种网站的条款和条件,我建议您在遇到任何麻烦之前修改这些条款。

进一步研究

如果您正在为您的问题寻找更通用的答案(例如 "How can I load javascript with Python."),我强烈建议您查看此站点上以前的答案,因为它们提供了一些对问题的非常好的见解:

Web-scraping JavaScript page with Python