更多>>关于我们
西安鲲之鹏网络信息技术有限公司从2010年开始专注于Web(网站)数据抓取领域。致力于为广大中国客户提供准确、快捷的数据采集相关服务。我们采用分布式系统架构,日采集网页数千万。我们拥有海量稳定高匿HTTP代理IP地址池,可以有效获取互联网任何公开可见信息。
您只需告诉我们您想抓取的网站是什么,您感兴趣的字段有哪些,你需要的数据是哪种格式,我们将为您做所有的工作,最后把数据(或程序)交付给你。
数据的格式可以是CSV、JSON、XML、ACCESS、SQLITE、MSSQL、MYSQL等等。
更多>>技术文章
去年我们曾介绍过借助close-proxy-authentication插件,实现Firefox下HTTP代理自动认证的方案(详见http://www.site-digger.com/html/articles/20180822/662.html),本文再介绍另外一种思路。
熟悉Http Proxy Basic Authentication的同学应该知道,代理服务器软件(例如Squid)是通过检测Proxy-Authorization头的值来判断当前用户是否有访问权限的。如果没有该头或者值不正确,HTTP服务器通常会返回407状态码。
因此,只要我们能够给每个HTTP请求都自动加上正确的Proxy-Authorization头,那么就实现了自动代理认证,浏览器内不会再弹出授权验证窗口。
要实现这个功能,我们可以借助Modify Headers这个火狐插件(http://www.garethhunt.com/modifyheaders/help/?v=0.7.1.1,后附下载链接),通过这个插件我们可以给任意HTTP请求加上自定义的Header。
下面代码是Selenium + Firefox + Modify Headers 测试代码:
# coding: utf-8 # selenium_firefox_proxy_auto_auth_method2.py # 借助Modify Headers插件实现火狐浏览器下的HTTP代理Basic认证 # 测试环境:Selenium 3.8.0 + geckodriver 0.18.0 + Firefox V56.0 import time import re from base64 import b64encode from selenium import webdriver # Modify Headers插件 - 用以HTTP代理Basic认证 # http://www.garethhunt.com/modifyheaders/help/?v=0.7.1.1 MODIFY_HEADERS_EXTENSION = 'modify_headers-0.7.1.1-fx.xpi' def get_firefox(proxy): fp = webdriver.FirefoxProfile() m = re.compile('([^:]+):([^\@]+)\@([\d\.]+):(\d+)').search(proxy) if m: print 'Set proxy into {}'.format(proxy) # 提取代理的各项参数 proxy_username = m.groups()[0] proxy_password = m.groups()[1] proxy_host = m.groups()[2] proxy_port = int(m.groups()[3]) # 设置代理参数 fp.set_preference('network.proxy.type', 1) fp.set_preference('network.proxy.http', proxy_host) fp.set_preference('network.proxy.http_port', proxy_port) fp.set_preference('network.proxy.ssl', proxy_host) fp.set_preference('network.proxy.ssl_port', proxy_port) credentials = '{}:{}'.format(proxy_username, proxy_password) credentials = b64encode(credentials) # 添加Modify Headers插 fp.add_extension(MODIFY_HEADERS_EXTENSION) fp.set_preference('modifyheaders.config.active', True) fp.set_preference('modifyheaders.headers.count', 1) # 添加Proxy-Authorization头 fp.set_preference('modifyheaders.headers.action0', 'Add') fp.set_preference('modifyheaders.headers.name0', 'Proxy-Authorization') fp.set_preference("modifyheaders.headers.value0", 'Basic {}'.format(credentials)) fp.set_preference('modifyheaders.headers.enabled0', True) firefox = webdriver.Firefox(firefox_profile=fp) return firefox def test(): firefox = get_firefox(proxy='test:kzp2016@59.55.102.216:8888') # 访问http://httpbin.org/ip回显当前IP firefox.get('https://httpbin.org/ip') time.sleep(1000) if __name__ == '__main__': test()
运行截图如下所示:
附modify_headers-0.7.1.1-fx.xpi下载地址:http://pan.webscraping.cn:8000/index.php/s/qpSdIZqjtF2e09t