Infi-chu:

http://www.cnblogs.com/Infi-chu/

一、设置代理

1.urllib

#HTTP代理类型
from urllib.error import URLError
from urllib.requests import ProxyHandler,build_opener
proxy='127.0.0.1:9743'
# proxy='username:password@127.0.0.1:9743' 用户名密码放在开头
proxy_handler=ProxyHandler({
'http':'http://'+proxy,
'https':'https://'+proxy
})
opener=build_opener(proxy_handler)
try:
res = opener.open('http://httpbin.org/get')
print(res.read().decode('uft-8'))
except URLError as e:
print(e.reason)
#SOCK5代理类型
import socks # pip3 install PySocks
import socket
from urllib import request
from urllib.error import URLError
socks.set_default_proxy(socks.SOCKS5,'127.0.0.1',9742)
socket.socket=socks.socksocket
try:
res = request.urlopen('http://httpbin.org/get')
print(res.read().decode('utf-8'))
except URLError as e:
print(e.reason)

2.requests
比urllib简单

# HTTP代理类型
improt requests
proxy='127.0.0.1:9743'
proxies = {
'http':'http://'+proxy,
'https':'https://'+proxy,
}
try:
res = requests.get('http://httpbin.org/get',proxies=proxies)
print(res.text)
except requests.exceptions.ConnectionError as e:
print('Error',e.args) # SOCK5代理类型(1)
import requests # pip3 install 'requests[socks]'
proxy='127.0.0.1:9742'
proxies={
'http':'socks5://'+proxy,
'https':'socks5://'+proxy,
}
try:
res = requests.get('http://httpbin.org/get',proxies=proxies)
print(res.text)
except requests.exceptions.ConnectionError as e:
print('Error',e.args)
# SOCK5代理类型(2)
import requests,socks,socket
socks.set_default_proxy(socks.SOCKS5,'127.0.0.1',9742)
socket.socket=socks.socksocket
try:
res = requests.get('http://httpbin.org/get',proxies=proxies)
print(res.text)
except requests.exceptions.ConnectionError as e:
print('Error',e.args)

3.Selenium
设置浏览器代理

from selenium import webdriver
proxy='127.0.0.1:9743'
chrome_options=webdriver.ChromeOptions() # 使用此方法传参数
chrome_options.add_argument('--proxy-server=http://'+proxy)
browser=webdriver.Chrome(chrome_options=chrome_options)
browser.get('http://httpbin.org/get')

设置认证代理

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import zipfile ip='127.0.0.1'
port=9743
username='test'
password='test'
manifest_json="""
{
"version":"1.0.0",
"manifest_version":2,
"name":"Chrome Proxy",
"permissions":[
"proxy",
"tabs",
"unlimitedStorage",
"storage",
"<all_urls>",
"webRequest",
"webRequestBlocking"
],
"background":{"scripts":["background.js"]}
}
"""
background_js="""
var config={
mode:"fixed_servers",
rules:{
singleProxy:{
scheme:"http",
host:"%(ip)s",
port:"%(port)s"
}
}
} chrome.proxy.settings.set({value:config,scope:"regular"},function(){});
function callbackFn(details){
return{
authCredentials:{
username:"%(username)s",
password:"%(password)s"
}
}
}
chrome.webRequest.onAuthRequired.addListener(
callbackFn,
{urls:["<all_urls>"]},
['blocking']
)
"""%{'ip':ip,'port':port,'username':username,'port':port}
plugin_file='proxy_auth_plugin.zip'
with zipfile.ZipFile(plugin_file,'w') as zp:
zp.writestr("manifest_json",manifest_json)
zp.writestr("background.js",background_js)
chrome_options=Options()
chrome_options.add_argument('--start-maximized')
chrome_options.add_extension(plugin_file)
browser=webdriver.Chrome(chrome_options=chrome_options)
browser.get('http://httpbin.org/get')

二、代理池维护
单一代理并不能完成我们的代理任务,所以需要更多数量的代理为我们服务。
我们将对代理进行筛选,并高效的为我们提供服务。
1.准备
需要使用redis数据库,aiohttp、requests、redis-py、pyquery、flask库
2.代理池的目标:存储模块、获取模块、检测模块、接口模块
3.各模块的实现:

https://github.com/Infi-chu/proxypool

三、利用代理爬取微信文章

https://github.com/Infi-chu/weixinspider

Python3爬虫(十五) 代理的更多相关文章

  1. 爬虫(十五):Scrapy框架(二) Selector、Spider、Downloader Middleware

    1. Scrapy框架 1.1 Selector的用法 我们之前介绍了利用Beautiful Soup.正则表达式来提取网页数据,这确实非常方便.而Scrapy还提供了自己的数据提取方法,即Selec ...

  2. Python爬虫(十五)_案例:使用bs4的爬虫

    本章将从Python案例讲起:所使用bs4做一个简单的爬虫案例,更多内容请参考:Python学习指南 案例:使用BeautifulSoup的爬虫 我们已腾讯社招页面来做演示:http://hr.ten ...

  3. 【Python3 爬虫】12_代理IP的使用

    我们在爬取页面的时候,如果长时间使用一个网址去爬取某个网站,就会受爬去限制,此时,我们引用了代理IP,IP随时在变化,也就不会被限制了 一下是国内提供免费代理IP的地址:http://www.xici ...

  4. python3笔记十五:python函数

    一:学习内容 函数概述 函数的参数与返回值 参数值传递和引用传递 关键字参数 默认参数 不定长参数 二:函数概述 1.本质:函数就是对功能的封装 2.优点: 简化代码结构,增加了代码的复用度(重复使用 ...

  5. python3 第十五章 - 数据类型之Sets(集合)

    python的官网里对集合的描述是: Python also includes a data type for sets. A set is an unordered collection with ...

  6. python3 第二十五章 - comprehensions(推导式)

    推导式(又称解析式),是Python的一种独有特性.推导式是可以从一个数据序列构建另一个新的数据序列的结构体. 共有三种推导,在Python2和3中都有支持: 列表(list)推导式 字典(dict) ...

  7. Python3爬虫(五)解析库的使用之XPath

    Infi-chu: http://www.cnblogs.com/Infi-chu/ XPath: 全称是 XML Path Language,XML路径语言,它是一门在XML文档中和HTML文档中查 ...

  8. 第三百三十五节,web爬虫讲解2—Scrapy框架爬虫—豆瓣登录与利用打码接口实现自动识别验证码

    第三百三十五节,web爬虫讲解2—Scrapy框架爬虫—豆瓣登录与利用打码接口实现自动识别验证码 打码接口文件 # -*- coding: cp936 -*- import sys import os ...

  9. 孤荷凌寒自学python第七十五天开始写Python的第一个爬虫5

    孤荷凌寒自学python第七十五天开始写Python的第一个爬虫5 (完整学习过程屏幕记录视频地址在文末) 今天在上一天的基础上继续完成对我的第一个代码程序的书写. 直接上代码.详细过程见文末屏幕录像 ...

  10. WCF技术剖析之十五:数据契约代理(DataContractSurrogate)在序列化中的作用

    原文:WCF技术剖析之十五:数据契约代理(DataContractSurrogate)在序列化中的作用 [爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济频道<天天山海经> ...

随机推荐

  1. js创建对象的几种方式 标签: javascript 2016-08-21 15:23 123人阅读 评论(0)

    1.传统方法,创建一个对象,然后给这个对象创建属性和方法. var person = new Object(); person.name = "张三"; person.age = ...

  2. January 22 2017 Week 4 Sunday

    Dare and the world always yields. 大胆挑战,世界总会让步. Try it if you dare. If you want to change, if you wan ...

  3. awk的简单使用

    awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各 ...

  4. git fetch 和 git pull 的区别

    Git中从远程的分支获取最新的版本到本地有这样2个命令: 1. git fetch:相当于是从远程获取最新版本到本地,不会自动merge git fetch origin master git log ...

  5. zabbix时间不同步

    Linux下如何实现与Internet时间同步 一.安装ntp [root@server-2 ~]# yum install -y ntpdate 二.同步时间 // 方式一.使用域名连接,要经过DN ...

  6. JS获取MVC Attrbuate验证是否通用

    直接用JQValidate的方法,$("#FeedBackForm").valid(); 当结果是true表示验证通过,false时表示验证失败~

  7. STM32之FSMC

    FSMC全称“静态存储器控制器”. 使用FSMC控制器后,可以把FSMC提供的FSMC_A[25:0]作为地址线,而把FSMC提供的FSMC_D[15:0]作为数据总线. (1)当存储数据设为8位时, ...

  8. angular1的复选框指令--checklistModel

    这个指令可以改变一组checkbox的model格式,提交的时候格式为[x,y,z,...] //复选框指令 .directive('checklistModel', ['$parse', '$com ...

  9. Python(一)数据结构和算法的20个练习题问答

    数据结构和算法 Python 提供了大量的内置数据结构,包括列表,集合以及字典.大多数情况下使用这些数据结构是很简单的. 但是,我们也会经常碰到到诸如查询,排序和过滤等等这些普遍存在的问题. 因此,这 ...

  10. Struts2-01

    一.Struts2的介绍 讲Struts2框架之前,我们需要知道框架是什么呢?估计大多数初学者都只知道其名却不知其意,框架就是一个半成品,别人将一些功能已经写好了,我们只需要拿来用即可,像我们之前使用 ...