睿信在线充值车车安如何交费

基于 Tor 匿名网络的多 IP 爬虫 - Python - 伯乐在线
& 基于 Tor 匿名网络的多 IP 爬虫
基于tor匿名网络的多ip爬虫。更换ip的方式有多种,其中tor这类型则适合ip更换次数不大,网页数据量也不大,但是又厌恶代理那天天失效的麻烦,则最简单快捷的便是使用tor在本机搭建一个出口端口,让需要更换ip的爬虫程序制定proxies指向的端口,简单而且快捷,可使用的ip池子总数1000左右,实际中有500左右可以使用,匿名性当然不用质疑了。
一.测试环境:
linux ubuntu 16.04
python 2.7
主要包:requests
requesocks
需要linux主机本身可以访问外网.自配vpn或者是香港主机也可以是window的电脑装linux的虚拟机,然后window使用vpn或者加速器等进行翻墙.
二.部署方式:
.. 2.1 环境准备
….. 2.1.1 Linux
….. 2.1.2 Python
….. 2.1.3 Tor
══════════
2.1 环境准备
──────
Linux 操作系统。Windows 部署没有验证。
2.1.1 Linux
???????????
Linux 各种发行版本均可。以 Ubuntu 为例
2.1.2 Python
┌────
│ sudo apt-get install python-pip
└────
┌────
│ sudo pip install requests
│ sudo pip install requesocks
└────
┌────
│ sudo apt-get install tor
│ sudo /etc/init.d/tor restart
└────
启动后socks监听9050端口。
┌────
│ tor –hash-password mypassword
└────
生成你的密码,之后编辑/etc/tor/torrc加上
ControlPort 9051
HashedControlPassword
16:53A77D60CA2BB8C1A6A3D701ADC
让ControlPort监听9051端口,后边那个16:开头的hash就是上一步得到的。
┌────
│ /etc/init.d/tor restart
└────
重启下tor。
三. python示例代码
requesocks
import requests
import requesocks
import time
url = 'http://api.ipify.org?format=json'
def getip_requests(url):
print "(+) Sending request with plain requests..."
r = requests.get(url)
print "(+) IP is: " + r.text.replace("\n", "")
def getip_requesocks(url):
print "(+) Sending request with requesocks..."
session = requesocks.session()
session.proxies = {'http': 'socks5://127.0.0.1:9050',
'https': 'socks5://127.0.0.1:9050'}
r = session.get(url)
print "(+) IP is: " + r.text.replace("\n", "")
def main():
print "Running tests..."
getip_requests(url)
getip_requesocks(url)
os.system("""(echo authenticate '"mypassword"'; echo \
quit) | nc localhost 9051""")
time.sleep(2)
getip_requesocks(url)
if __name__ == "__main__":
12345678910111213141516171819202122232425262728293031323334
import osimport requestsimport requesocksimport time url = 'http://api.ipify.org?format=json'
def getip_requests(url):
print "(+) Sending request with plain requests..."
r = requests.get(url)
print "(+) IP is: " + r.text.replace("\n", "")
def getip_requesocks(url):
print "(+) Sending request with requesocks..."
session = requesocks.session()
session.proxies = {'http': 'socks5://127.0.0.1:9050',
'https': 'socks5://127.0.0.1:9050'}
r = session.get(url)
print "(+) IP is: " + r.text.replace("\n", "")
def main():
print "Running tests..."
getip_requests(url)
getip_requesocks(url)
os.system("""(echo authenticate '"mypassword"'; echo \
quit) | nc localhost 9051""")
time.sleep(2)
getip_requesocks(url)
if __name__ == "__main__":
pip install PySocks
此可以使用requests的方式发送请求
import socket
import socks
import requests
socks.set_default_proxy(socks.SOCKS5, "127.0.0.1", 9050)
socket.socket = socks.socksocket
print(requests.get('http://api.ipify.org?format=json').text)
import socketimport socksimport requests socks.set_default_proxy(socks.SOCKS5, "127.0.0.1", 9050)socket.socket = socks.socksocketprint(requests.get('http://api.ipify.org?format=json').text)
结果是类似的.
要在程序内实现tor更换出口ip则调用下条指令即可
os.system("""(echo authenticate '"mypassword"'; echo \
quit) | nc localhost 9051""")
<div class="crayon-num" data-line="crayon-595d6a<div class="crayon-num crayon-striped-num" data-line="crayon-595d6a
os.system("""(echo authenticate '"mypassword"'; echo \
quit) | nc localhost 9051""")
最终,在已知的7种爬虫更换ip的方式中,tor算是部署成本最小的,只要你本机能够翻墙即可拥有500个ip供使用,并且能够保证相当高的匿名性.但是问题也是存在的,如果目标网站网页内容多,或者在抓取的时候使用phantomjs等方式就也一样是网速要求比较高这个时候就需要另外的方式了,比如adsl….
额外的爬虫进阶技术文:
浏览器模拟操作:
爬虫分布式技术:传送门
相关代码均在github开源项目中.欢迎star和fork.也希望多多指教.
打赏支持我写出更多好文章,谢谢!
打赏支持我写出更多好文章,谢谢!
关于作者:
可能感兴趣的话题
用tor爬取,很多网站会识别tor,返回验证页面,如google、amazon
关于 Python 频道
Python频道分享 Python 开发技术、相关的行业动态。
新浪微博:
推荐微信号
(加好友请注明来意)
&#8211; 好的话题、有启发的回复、值得信赖的圈子
&#8211; 分享和发现有价值的内容与观点
&#8211; 为IT单身男女服务的征婚传播平台
&#8211; 优秀的工具资源导航
&#8211; 翻译传播优秀的外文文章
&#8211; 国内外的精选文章
&#8211; UI,网页,交互和用户体验
&#8211; 专注iOS技术分享
&#8211; 专注Android技术分享
&#8211; JavaScript, HTML5, CSS
&#8211; 专注Java技术分享
&#8211; 专注Python技术分享
& 2017 伯乐在线#author:wuhao
#--*------------*--
#-****#爬取代理IP并保存到Excel----#爬取当日的代理IP并保存到Excel,目标网站#如果访问频率太快的话,会被网站封掉IP
import urllib.request
import urllib.parse
import xlwt
import http.cookiejar
import datetime
from bs4 import BeautifulSoup
import time
class GetProxyIp():
def __init__(self,opener,):
self.opener=opener
def GetHtmlpage(self,url):
html=self.opener.open(url)
return html.read().decode("utf-8")
def cleanHtml(self,html):
#对网页进行清洗,获取IP,端口,类型,是否匿名,服务器地址
server_addr=[]
Is_niming=[]
soup=BeautifulSoup(html,"html.parser")
#print(soup)
ip_table=soup.find("table",id="ip_list")
ip_result=ip_table.find_all("tr")
for i in range(1,len(ip_result),1):
result_td=ip_result[i].find_all("td")
ip.append(result_td[1].string)
port.append(result_td[2].string)
server_addr.append(result_td[3].a.string)
server_addr.append(result_td[3].string)
Is_niming.append(result_td[4].string)
type.append(result_td[5].string)
time.append(result_td[9].string.split(" ")[0])
except Exception:
print(Exception)
print("something wrong happened")
return ip,port,server_addr,Is_niming,type,time
if __name__ == "__main__":
#获取当前时间,并截除其前2位
currentTime = datetime.datetime.now().strftime("%Y-%m-%d")[2:]
#创建一个opener
cookie=http.cookiejar.CookieJar()
cookieHandle=urllib.request.HTTPCookieProcessor(cookie)
#proxy={"https":"https://222.85.50.64:808"}
#proxyHandle=urllib.request.ProxyHandler(proxy)
opener=urllib.request.build_opener(cookieHandle)
#opener.add_handler(proxyHandle)
#创建一个header,伪装成浏览器访问
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0. Safari/537.36"
for key,value in header.items():
enum=(key,value)
head.append(enum)
#为opener添加head
opener.addheaders=head
#需要爬取的地址
url="/nn/{num}/"
Is_Over=True
#实例化对象
GPI=GetProxyIp(opener)
book=xlwt.Workbook()
sheet=book.add_sheet(sheetname=currentTime)
sheet.write(0, 0,"IP地址")
sheet.write(0, 1, "端口")
sheet.write(0, 2, "服务器地址")
sheet.write(0, 3, "匿名")
sheet.write(0, 4, "类型")
sheet.write(0, 5 ,"日期")
#初始化_num为1
# 初始化位置为开头
while(Is_Over):
#temp用于记录是否是当日的代理IP,如果不是记录其位置
url1=url.format(num=_num)
html=GPI.GetHtmlpage(url1)
result=GPI.cleanHtml(html)
for k in range(len(result[5])):
if result[5][k]!=currentTime:
Is_Over=False
#如果temp=-1,就全部进行写入
if temp==-1:
for i in range(len(result)):
for j in range(len(result[i])):
print("yi写入"+str(result[i][j]))
sheet.write(index+j+1,i,result[i][j])
for k in range(len(result)):
for kk in range(temp):
print("yi写入" + str(result[k][kk]))
sheet.write(index+kk+1,k,
result[k][kk])
index+=len(result[0])
time.sleep(16)
print("写入完成")
book.save("proxy.xls")                                                                                                                #欢迎大家评论指导
阅读(...) 评论()8722人阅读
python(39)
在写爬虫爬取数据的时候,经常遇到如下的提示,
HTTP Error 403: Forbidden
之前已经写了一个使用多个headers 的,但是这种还是只有一个IP 只不过是伪装为不同的浏览器而已,所以想做到更近一步防止被封,还是需要及时更换不同IP,下面记录一下python 使用代理爬取的过程。PS: 爬虫尽量不要太频繁的说。。。
直接上代码吧:
proxy_list=[
'202.106.169.142:80',
'220.181.35.109:8080',
'124.65.163.10:8080',
'117.79.131.109:8080',
'58.30.233.200:8080',
'115.182.92.87:8080',
'210.75.240.62:3128',
'211.71.20.246:3128',
'115.182.83.38:8080',
'121.69.8.234:8080',
= random.choice(proxy_list)
= urllib2.ProxyHandler({'http':proxy})
= urllib2.build_opener(urlhandle)
urllib2.install_opener(opener)
= urllib2.Request(listurl,headers=headers)
= urllib2.urlopen(req).read()
根据具体在爬取时光网,豆瓣的电影时,的使用经验:说明一下
- 免费的代理很不太稳定,如果大量长时间爬取,还是稍微花点小钱吧,很便宜。
- 找那些免费代理IP, 使用那些高匿的代理。推荐
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:160044次
积分:2659
积分:2659
排名:第12968名
原创:105篇
转载:19篇
评论:17条
(1)(2)(1)(5)(3)(8)(2)(1)(3)(12)(6)(4)(2)(4)(6)(2)(6)(32)(1)(2)(1)(5)(15)

我要回帖

更多关于 优信在线睿宝 的文章

 

随机推荐