Python - 如何在抓取时欺骗反adblock过滤器?

时间:2015-02-22 20:16:04

标签: python web-scraping

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

1 个答案:

答案 0 :(得分:2)

Javascript解析

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

<强>将(S)

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

  
      
  1. 在应用程序中嵌入Web浏览器并模拟普通用户。
  2.   
  3. 远程连接到Web浏览器并通过脚本自动执行   语言。
  4.   
  5. 使用专用附加组件自动化浏览器
  6.   
  7. 使用框架/库来模拟完整的浏览器。
  8.   

正如您所看到的,每个人都需要模拟浏览器和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()

<强>然而,

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

进一步研究

如果您正在寻找对您的问题更通用的答案(例如“我如何使用Python加载javascript。”)我强烈建议您查看此网站上的先前答案,因为它们提供了一些非常好的洞察力:

Web-scraping JavaScript page with Python

相关问题