10-穿墙代理的设置 | 01.数据抓取 | Python

10-穿墙代理的设置

郑昀 201005 隶属于《01.数据抓取》小节

 

我们访问 Twitter 等被封掉的网站时,需要设置 Proxy 。

1.使用HTTP Proxy

下面是普通HTTP Proxy的设置方式:

1.1.pycurl 的设置

_proxy_connect = "http://127.0.0.1:1984"

c = pycurl.Curl()

c.setopt(pycurl.PROXY, _proxy_connect)

 

1.2.urllib2 的设置

req = urllib2.Request(link) 
proxy = urllib2.ProxyHandler({'http':'http://127.0.0.1:1984'}) 
opener = urllib2.build_opener(proxy,urllib2.HTTPHandler) 
urllib2.install_opener(opener) 
req.add_header('User-Agent', URLLIB2_USER_AGENT) 
urllib2.urlopen(link)

… 
opener.close()

 

1.3.httplib 的设置

conn = httplib.HTTPConnection("127.0.0.1",1984) 
conn.request("GET", "http://www.python.org/index.html") 
r = conn.getresponse() 
print r.status, r.reason

 

1.4.httplib2 的设置


import httplib2
import socks
httplib2.debuglevel=4
h = httplib2.Http(proxy_info = httplib2.ProxyInfo(socks.PROXY_TYPE_HTTP, 'proxy_host', proxy_port))
r,c = h.request(http://bitworking.org/news/)

参见 httplib2 的 Wiki 说明

socks 库需要安装,主页地址:http://socksipy.sourceforge.net/ ,它不需要安装,下载源代码包后直接把 socks.py 复制到 Python's lib/site-packages 目录即可。

httplib2 则用 easy_install httplib2 安装即可。

 

1.5.socket代理

更底层的socket代理如下所示:


import socks, socket
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "proxy_host", proxy_port)
socket.socket = socks.socksocket
需要 socks 库。 

1.6.twisted.web.client 的设置


from twisted.internet import reactor
from twisted.web import client
class ProxyClientFactory(client.HTTPClientFactory):
    def setURL(self, url):
        client.HTTPClientFactory.setURL(self, url)
        self.path = url
factory = ProxyClientFactory('http://url_you_want')
reactor.connectTCP('http://proxy_host', proxy_port, factory)
reactor.run()
如果代理需要Basic身份验证,如代理地址是:http://user:pwd@host:port ,那么就用到proxy-authenticate header了:

import base64
# Proxy credentials
proxyAuth = base64.encodestring('%s:%s' % (proxy_username,proxy_password))
proxy_authHeader = "Basic " + proxyAuth.strip()

factory = ProxyClientFactory('http://url_you_want')

factory.headers={'Proxy-Authenticate': proxy_authHeader}

reactor.connectTCP('http://proxy_host', proxy_port, factory)

只要把Proxy-Authenticate header字段设置好,前面的httplib/urllib2等如法炮制,可参考 Python2.6的 test_urllib2 示范代码中的 test_proxy_basic_auth 函数。

2.使用HTTPS Proxy

如果代理是HTTPS的,并需要证书,那么请参考 python-httpclient 的写法。

 

2.1.urllib2 的设置

Python 2.X可参考 Recipe 456195 的代码。或参见 Python2.6的 test_urllib2 示范代码中的test_proxy_https 函数。

Python 3k的参见 revision 74204

时间: 2024-12-21 22:40:22

10-穿墙代理的设置 | 01.数据抓取 | Python的相关文章

05-访问超时设置 | 01.数据抓取 | Python

05-访问超时设置 郑昀 201005 隶属于<01.数据抓取>小节 设置 HTTP 或 Socket 访问超时,来防止爬虫抓取某个页面时间过长.   pycurl 库的调用中,可以设置超时时间: c.setopt(pycurl.CONNECTTIMEOUT, 60)   在 Python 2.6 版本下,httplib 库由于有如下构造函数: class HTTPConnection:     def __init__(self, host, port=None, strict=None, 

07-爬虫的多线程调度 | 01.数据抓取 | Python

07-爬虫的多线程调度 郑昀 201005 隶属于<01.数据抓取>小节 一般让爬虫在一个进程内多线程并发,有几种方法: Stackless :Stackless Python是Python的一个增强版本.Stackless Python修改了Python的代码,提供了对微线程的支持.微线程是轻量级的线程,与前边所讲的线程相比,微线程在多个线程间切换所需的时间更多,占用资源也更少. Twisted :主要利用 Twisted 中的异步编程能力.如 addCallback , callLater

百万级别知乎用户数据抓取与分析之PHP开发_php实例

这次抓取了110万的用户数据,数据分析结果如下: 开发前的准备 安装Linux系统(Ubuntu14.04),在VMWare虚拟机下安装一个Ubuntu: 安装PHP5.6或以上版本: 安装curl.pcntl扩展. 使用PHP的curl扩展抓取页面数据 PHP的curl扩展是PHP支持的允许你与各种服务器使用各种类型的协议进行连接和通信的库. 本程序是抓取知乎的用户数据,要能访问用户个人页面,需要用户登录后的才能访问.当我们在浏览器的页面中点击一个用户头像链接进入用户个人中心页面的时候,之所以

数据抓取的艺术(二):数据抓取程序优化

      续前文:<数据抓取的艺术(一):Selenium+Phantomjs数据抓取环境配置>. 程序优化:第一步开始: for i in range(startx,total):     for j in range(starty,total):         BASE_URL = createTheUrl([item[i],item[j]])         driver.get(BASE_URL)         driver = webdriver.PhantomJS()    

数据抓取的艺术(三):抓取Google数据之心得

 本来是想把这部分内容放到前一篇<数据抓取的艺术(二):数据抓取程序优化>之中.但是随着任务的完成,我越来越感觉到其中深深的趣味,现总结如下:    (1)时间      时间是一个与抓取规模相形而生的因素,数据规模越大,时间消耗往往越长.所以程序优化变得相当重要,要知道抓取时间越长,出错的可能性就越大,这还不说程序需要人工干预的情境.一旦运行中需要人工干预,时间越长,干预次数越多,出错的几率就更大了.在数据太多,工期太短的情况下,使用多线程抓取,也是一个好办法,但这会增加程序复杂度,对最终数

python代码苍穹平台数据抓取

问题描述 python代码苍穹平台数据抓取 原文地址:https://github.com/yiyuezhuo/cangqiong-scratchhttp://v.kuaidadi.com/ 在上面这个网站平台抓取数据,为什么只有10个城市的数据可以抓取数据,其他的就不行呢?原文说10个城市可以抓取,但是我觉得应该通用的,知道区号不就可以获取相应的数据了吗? 代码如下: # -*- coding: utf-8 -*- """ Created on Thu Mar 17 12:

数据抓取的艺术(一):Selenium+Phantomjs数据抓取环境配置

数据抓取是一门艺术,和其他软件不同,世界上不存在完美的.一致的.通用的抓取工具.为了不同的目的,需要定制不同的代码.不过,我们不必Start from Scratch,已经有许多的基本工具.基本方法和基础框架可供使用.不同的工具.不同的方法.不同的框架的特点也不同.了解这些工具.方法和框架是首要任务,接下来就需要明白它们的差异都在哪里.什么情境该用什么东东,最后才是析出规则.编写代码.运行程序来抓取数据.所以说,其实数据抓取的学习路线,不但很长而且很杂.     为了一个特定的目的,我需要爬取G

用javascript解决外部数据抓取中的乱码问题_应用技巧

我们一般会在两个地方用到外部数据抓取,一个是在asp中,一个是在hta中.如果外部数据是gb2312编码的,就涉及到转码的问题,但是传统的用vbs函数进行处理的方法,运算量比较大,有些特殊字符还会出错.    如果用adodb.stream控件来进行转码,就简单多了,不需要借助vbs的二进制处理函数了,同时速度快了很多. 复制代码 代码如下: <script>  function loadData(sUrl){      var xh      xh=new ActiveXObject(&qu

数据抓取的一个类,包含一些常用的方法

原文:数据抓取的一个类,包含一些常用的方法 using System;using System.Configuration;using System.IO;using System.Net;using System.Text;using System.Text.RegularExpressions; namespace XXX{    /// <summary>    /// Func 的摘要说明.    /// </summary>    public class Func