【Python3.6爬虫学习记录】(十一)使用代理IP及用多线程测试IP可用性--刷访问量
前言:本来准备写一个刷空间留言的脚本,然而kb TX,无限循环空间验证码。上午还傻x的学验证码识别,后来才发现根本发不了留言,即使填的是对的,仍然继续弹出。无奈,睡了一觉,开始搞新玩意–代理IP!其实之前就应该用到的,然而一直用selenium,没好好看header,也没用cookie和IP。之后用到再补上,同时还有简单验证码的识别等。
可以了解一下代理IP相关知识:通过Python爬虫代理IP快速增加博客阅读量
发现一篇很好的文章: Python3网络爬虫(十一):爬虫黑科技之让你的爬虫程序更像人类用户的行为(代理IP池等)
关于刷访问量,主要机制是网页限制仅不同IP登陆才能增加访问量,虽然有的网页是根据cookies增加,后者更低级。
目录
- 目录
- 第一部分 requests ChromeDriver PhantomJS的代理IP使用
- 1-1 requests使用代理IP
- 1-2 ChromeDriver使用代理IP
- 1-3 PhantomJS使用代理IP
- 第二部分测试代理IP的可用性
- 2-1 未使用线程测试
- 2-2 使用多线程测试
第一部分 requests , ChromeDriver, PhantomJS的代理IP使用
1-1 requests使用代理IP
http = 'http://'+str(ip)proxies = {"http": http}try:r = requests.get("http://blog.csdn.net/qq_36962569/article/details/77387299", proxies=proxies)
except Exception as e:print(+e)
同理,requests模块添加headers ,cookies ,data,可以直接
requests.get(url,headers=headers)
requests.get(url,cookies=cookies
requests.get(url,data=data)
也可以传递多个参数,
requests.get(url,headers=headers,data=data)
参考链接:
Python 笔记七:Requests爬虫技巧(隆重推出,十分详细)
Python爬虫技巧—设置代理IP
1-2 ChromeDriver使用代理IP
def ChromeDriverWithIP():PROXY = "47.52.108.18"chrome_options = webdriver.ChromeOptions()# 两种用法添加代理IP# chrome_options.add_argument('--proxy-server=http://35.189.128.127')chrome_options.add_argument('--proxy-server={0}'.format(PROXY))# 传递代理IPchrome = webdriver.Chrome(chrome_options=chrome_options)chrome.get('http://www.cnblogs.com/buzhizhitong/p/5714419.html')print('2: ', chrome.page_source)
1-3 PhantomJS使用代理IP
#phantomjs selenium 如何动态修改代理
from selenium import webdriver
from selenium.webdriver import DesiredCapabilities
from selenium.webdriver.common.proxy import Proxy
from selenium.webdriver.common.proxy import ProxyTypedef DynamicUsingIP():proxy = Proxy({'proxyType': ProxyType.MANUAL,'httpProxy': '210.38.1.134' # 代理ip和端口})# 新建一个代理IP对象desired_capabilities = DesiredCapabilities.PHANTOMJS.copy()# 加入代理IPproxy.add_to_capabilities(desired_capabilities)driver = webdriver.PhantomJS(desired_capabilities=desired_capabilities)# 测试一下,打开使用的代理IP地址信息driver.get('http://1212.ip138.com/ic.asp')print(driver.page_source)# # 现在开始切换ip# # 再新建一个ip# proxy = Proxy(# {# 'proxyType': ProxyType.MANUAL,# 'httpProxy': 'ip:port' # 代理ip和端口# }# )# # 再新建一个“期望技能”,()# desired_capabilities = DesiredCapabilities.PHANTOMJS.copy()# # 把代理ip加入到技能中# proxy.add_to_capabilities(desired_capabilities)# # 新建一个会话,并把技能传入# driver.start_session(desired_capabilities)# driver.get('http://httpbin.org/ip')# print(driver.page_source)driver.quit()
参考链接:
盘点selenium phantomJS使用的坑(介绍PhantomJS相关的注意事项)
在Selenium中设置代理IP(介绍多种设置方法)
selenium phantomjs 设置代理ip方法
phantomjs和selenium设置proxy、headers()
第二部分测试代理IP的可用性
2-1 未使用线程测试
# IP check,将可用的IP重新保存到IP
def IPCheck():IP = []SuccessIP = []# 读取文件with open('IP.txt','r') as f:for line in f:IP.append(line[:-1])# request模块使用代理for ip in IP:http = 'http://'+str(ip)proxies = {"http": http}time.sleep(10)try:r = requests.get("http://blog.csdn.net/qq_36962569/article/details/77387299", proxies=proxies)except:print(str(ip)+'---connect failed')else:SuccessIP.append(ip)print(str(ip)+'---success')# 重新保存n=0f=open('IP.txt','w')for ip in SuccessIP:f.write(ip+'\n')n+=1f.close()print('Total are '+str(n)+' successful IP')
速度非常慢,基本上测试50个,得用3分钟。而使用多线程,测试70个,仅用十来秒(真tn的快嘞)。
参考链接:
使用python验证代理ip是否可用
2-2 使用多线程测试
# 使用多线程验证IP 可用性
def TreadCheckIP():# 获得IPproxys = []with open('IP.txt','r') as f:for line in f:proxys.append(line[:-1])proxy_ip = open('proxy_ip.txt', 'w') # 新建一个储存有效IP的文档lock = threading.Lock() # 建立一个锁# 验证代理IP有效性的方法def test(i):socket.setdefaulttimeout(5) # 设置全局超时时间try:http = 'http://' + str(proxys[i])proxies = {"http": http}r = requests.get("http://blog.csdn.net/qq_36962569/article/details/77387299", proxies=proxies)lock.acquire() # 获得锁print(proxys[i], 'is OK')proxy_ip.write('%s\n' % str(proxys[i])) # 写入该代理IPlock.release() # 释放锁except Exception as e:lock.acquire()print(proxys[i], e)lock.release()# 单线程验证'''for i in range(len(proxys)):test(i)'''# 多线程验证threads = []for i in range(len(proxys)):thread = threading.Thread(target=test, args=[i])threads.append(thread)thread.start()# 阻塞主进程,等待所有子线程结束for thread in threads:thread.join()proxy_ip.close() # 关闭文件
关于多线程还不是很懂,自己还写不出来,后续继续了解学习。
参考链接:
python爬虫成长之路(二):抓取代理IP并多线程验证(写的非常好)
【Python3.6爬虫学习记录】(十一)使用代理IP及用多线程测试IP可用性--刷访问量相关推荐
- 【Python3.6爬虫学习记录】(十三)在阿里云服务器上运行爬虫
前言: 也快开学了,学习的兴趣逐渐下降.搞点事情,增加点乐子. 昨天比较了阿里云和腾讯云,都有免费试用机会.都要先实名认证,阿里云每天10点开始抢资格,可以免费领取六个月的基础版:腾讯每天9:30开始 ...
- 【Python3.6爬虫学习记录】(九)模拟登陆QQ空间爬取好友所有留言并制作词云
前言:非常郁闷,写了第三遍了,无故404 学了五天了,熬夜搞出这份代码,虽然一度卡死几个小时,但结果是好的. 目录 第一部分 Selenium+Chrome爬取空间留言 1.1 使用说明 1.2 代码 ...
- 【Python3.6爬虫学习记录】(十五)Scrapy爬虫框架的应用及马赛克拼图生成
目录 目录 前言 1.Scrapy框架应用 1.1.Scrapy准备 1.2.创建项目及配置 1.3.网页分析及代码实现 1.3.1 items.py 中定义存储的数据 1.3.2 spiders文件 ...
- 【Python3.6爬虫学习记录】(十二)PhantomJS模拟登陆并爬取教务处学生照片(哈工大)
前言:这也不算心血来潮的事情,前面几天文章都涉及过,之前一直觉得很麻烦.必须SSLVPN登陆,到教务处页面,然后进行页面跳转到照片页面.所以每次打开图片页面都要保证登陆教务处,当然可以使用cookie ...
- Python爬虫学习第十一天---pymongo模块使用
Python爬虫学习第十一天-pymongo模块使用 一.安装pymongo模块 python3 -m pip install pymongo 二.pymongo模块的使用 1.配置基础项 user ...
- Python3 爬虫学习笔记 C15【代理的基本使用】
Python3 爬虫学习笔记第十五章 -- [代理的基本使用] 文章目录 [15.1]代理初识 [15.2]urllib 库使用代理 [15.3]requests 库使用代理 [15.4]Seleni ...
- 爬虫学习记录3:request库基础用法
1.request库基础用法 1.1get()及post()对比解析(发送请求) # 百度举例 import requests url = 'https://www.baidu.com/' heade ...
- Python3网络爬虫使用User Agent和代理IP隐藏身份
运行平台:Windows Python版本:Python3.x IDE:PyCharm3.6 转载自:http://blog.csdn.net/c406495762/article/details ...
- 基于jupyter notebook的简单爬虫学习记录
目录 前言 一.基础理解 二.前期准备 三.爬虫实操[入门] 3.1.引入库 3.2.请求网页 3.3.解析网页 3.3.1.网页解读 3.3.2.熟悉部分BeautifulSoup语法规则 3.4. ...
最新文章
- php 长文本_php字符串太长怎么办
- hdu2.1.2 How many prime numbers(计算素数的个数)
- Geany包含中文运行报错解决办法
- 简单介绍Linux下安装Tomcat的步骤
- python术语中英对照栈图_Python常用技术栈总结
- Java 改变cmd颜色_9 个小技巧让你的 if else 看起来更优雅!
- C++ Primer 第10章 习题10.24
- nvarchar转换为int类型失败_2.2 C++强制类型转换 | 将3.3转换为整型输出
- qt同时两个动画执行_Qt 动画应用
- css 图片放大1.2倍,什么是二倍图?怎样使用二倍图?
- 房东要涨800房租,我用Python抓取帝都几万套房源信息,主动涨了1000。
- 这游戏到底怎么了? 一年后,再看《刺客信条奥德赛》
- 【Asan】新鲜货:使用ASan检测内存越界问题
- Python爬虫系列之某了么h5签名sign算法
- 联通大数据应用及沃云平台支撑能力
- 五款优质资源网站 每一个都让你欲罢不能
- 派森python_派森(Python)
- Opencv-python滤镜系列(3): 凹透镜滤镜效果实现
- 【数据结构】【实验作业05】求两个集合的并集、交集、差集,集合用链表
- 最好的嵌入式开发板是哪个?