更多>>关于我们
西安鲲之鹏网络信息技术有限公司从2010年开始专注于Web(网站)数据抓取领域。致力于为广大中国客户提供准确、快捷的数据采集相关服务。我们采用分布式系统架构,日采集网页数千万。我们拥有海量稳定高匿HTTP代理IP地址池,可以有效获取互联网任何公开可见信息。
您只需告诉我们您想抓取的网站是什么,您感兴趣的字段有哪些,你需要的数据是哪种格式,我们将为您做所有的工作,最后把数据(或程序)交付给你。
数据的格式可以是CSV、JSON、XML、ACCESS、SQLITE、MSSQL、MYSQL等等。
更多>>技术文章
前面介绍了通过控制IE浏览器进行自动化数据采集的方案。它的优点是可以避开复杂的页面加载过程(例如,Ajax,数据加密),降低了开发难度;缺点是可控性差(比如,代理设置、请求头修改、多线程都很难实现),另外该方案不能够跨平台(受限于IE,只能工作于Windows下)。
本文将介绍一种使用webkit浏览器引擎进行数据采集的方案。
WebKit是开源的Web浏览器引擎,苹果的Safari、谷歌的Chrome浏览器都是基于这个框架来开发的。WebKit 还支持移动设备和手机,包括iPhone和Android手机都是使用WebKit做为浏览器的核心。了解更多>>>
由于是直接使用浏览器引擎,所以能够访问和修改浏览器的各项底层属性,能够与其进行深度的交互。例如,可以进行代理设置、HTTP头读取和修改、Cookie读取和设置、缓存控制、URL过滤。另外,Webkit方案还能够跨平台使用。
Qt库是一个跨平台C++图形用户界面应用程序开发框架,QtWebKit是Webkit在Qt库中的封装。
PyQt4是Qt库的Python实现,我们可以直接使用PyQt4.QtWebKit来实现一个自定义功能的浏览器。
spynner是一个对PyQt4.QtWebKit 的封装库,使得QtWebKit更易于使用,该开源项目的位置在https://github.com/makinacorpus/spynner。
下面是一个spynner的使用示例。我们将访问http://duckduckgo.com,在页面加载完成后搜索”site-digger.com“关键字,并在搜索完成后获取搜索结果(JS动态生成的):
# test.py import spynner if __name__ == "__main__": browser = spynner.Browser() # 设置代理 #browser.set_proxy('http://host:port') browser.show() try: browser.load(url='http://duckduckgo.com', load_timeout=120, tries=1) except spynner.SpynnerTimeout: print 'Timeout.' else: # 输入搜索关键字 browser.wk_fill('input[id="search_form_input_homepage"]', 'site-digger.com') # 点击搜索按钮,并等待页面加载完毕 browser.wk_click('input[id="search_button_homepage"]', wait_load=True) # 获取页面的HTML html = browser.html if html: html = html.encode('utf-8') open('search_results.html', 'w').write(html) browser.close()
运行截图如下:
spynner更多的使用举例:https://github.com/makinacorpus/spynner/blob/master/src/spynner/tests/spynner.rst