python爬虫实战(一)——实时获取代理ip
在爬虫学习的过程中,维护一个自己的代理池是非常重要的。
详情看代码:
1.运行环境 python3.x,需求库:bs4,requests
2.实时抓取西刺-国内高匿代理中前3页的代理ip(可根据需求自由修改)
3.多线程对抓取的代理进行验证并存储验证后的代理ip
#-*-coding:utf8-*- import re,threading,requests,time
import urllib.request
from bs4 import BeautifulSoup as BS rawProxyList = []
checkedProxyList = []
targets = []
headers = {
'User-Agent': r'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',
'Connection': 'keep-alive'
} for i in range(1,4):
target = r"http://www.xicidaili.com/nn/%d" %i
targets.append(target)
#print (targets) #获取代理的类
class ProxyGet(threading.Thread):
def __init__(self,target):
threading.Thread.__init__(self)
self.target =target def getProxy(self):
print ("目标网站:"+self.target)
r = requests.get(self.target,headers =headers)
page = r.text
soup = BS(page,"lxml")
#这里的class_用的是"Searching by CSS class"",BS文档中有详细介绍
tr_list = soup.find_all("tr", class_= "odd") for i in range(len(tr_list)):
row = []
#.stripped_strings 方法返回去除前后空白的Python的string对象.
for text in tr_list[i].stripped_strings:
row.append(text)
#row = ['58.208.16.141','808','江苏苏州','高匿','HTTP,......]
ip =row[0]
port = row[1]
agent = row[4].lower()
addr =agent+ "://" + ip + ":" + port
proxy = [ip, port, agent, addr]
rawProxyList.append(proxy) def run(self):
self.getProxy() #检验代理类
class ProxyCheck(threading.Thread):
def __init__(self,proxyList):
threading.Thread.__init__(self)
self.proxyList = proxyList
self.timeout =2
self.testUrl = "https://www.baidu.com/" def checkProxy(self): for proxy in self.proxyList:
proxies = {}
if proxy[2] =="http":
proxies['http'] = proxy[3]
else:
proxies['https'] = proxy[3]
t1 =time.time()
try:
r = requests.get(self.testUrl, headers=headers, proxies=proxies, timeout=self.timeout)
time_used = time.time() - t1
if r:
checkedProxyList.append((proxy[0],proxy[1],proxy[2],proxy[3],time_used))
else:
continue
except Exception as e:
continue def run(self):
self.checkProxy()
print("hello") if __name__ =="__main__":
getThreads = []
checkedThreads = [] # 对每个目标网站开启一个线程负责抓取代理
for i in range(len(targets)):
t= ProxyGet(targets[i])
getThreads.append(t) for i in range(len(getThreads)):
getThreads[i].start() for i in range(len(getThreads)):
getThreads[i].join() print ('.'*10+"总共抓取了%s个代理" %len(rawProxyList) +'.'*10) #开启20个线程负责校验,将抓取到的代理分成20份,每个线程校验一份
for i in range(10):
n =len(rawProxyList)/10
#print (str(int(n * i))+ ":" +str(int(n * (i+1))))
t = ProxyCheck(rawProxyList[int(n * i):int(n * (i+1))])
checkedThreads.append(t) for i in range(len(checkedThreads)):
checkedThreads[i].start() for i in range(len(checkedThreads)):
checkedThreads[i].join()
print ('.'*10+"总共有%s个代理通过校验" %len(checkedProxyList) +'.'*10 ) #持久化
f = open("proxy_list.txt",'w+')
for checked_proxy in sorted(checkedProxyList):
print ("checked proxy is: %s\t%s" %(checked_proxy[3],checked_proxy[4]) )
f.write("%s:%s\t%s\t%s\t%s\n" % (checked_proxy[0], checked_proxy[1], checked_proxy[2], checked_proxy[3], checked_proxy[4]))
f.close()
python爬虫实战(一)——实时获取代理ip的更多相关文章
- 原创:Python爬虫实战之爬取代理ip
编程的快乐只有在运行成功的那一刻才知道QAQ 目标网站:https://www.kuaidaili.com/free/inha/ #若有侵权请联系我 因为上面的代理都是http的所以没写这个判断 代 ...
- Python学习笔记六(免费获取代理IP)
为获取网上免费代理IP,闲的无聊,整合了一下,免费从三个代理网站获取免费代理IP,目的是在某一代理网站被限制时,仍可从可以访问的其他网站上获取代理IP.亲测可用哦!^_^ 仅供大家参考,以下脚本可添 ...
- Python爬虫技术:爬虫时如何知道是否代理ip伪装成功?
前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. python爬虫时如何知道是否代理ip伪装成功: 有时候我们的爬虫程序添加了 ...
- python编写的自动获取代理IP列表的爬虫-chinaboywg-ChinaUnix博客
python编写的自动获取代理IP列表的爬虫-chinaboywg-ChinaUnix博客 undefined Python多线程抓取代理服务器 | Linux运维笔记 undefined java如 ...
- python爬虫之反爬虫(随机user-agent,获取代理ip,检测代理ip可用性)
python爬虫之反爬虫(随机user-agent,获取代理ip,检测代理ip可用性) 目录 随机User-Agent 获取代理ip 检测代理ip可用性 随机User-Agent fake_usera ...
- Python爬虫实战五之模拟登录淘宝并获取所有订单
经过多次尝试,模拟登录淘宝终于成功了,实在是不容易,淘宝的登录加密和验证太复杂了,煞费苦心,在此写出来和大家一起分享,希望大家支持. 温馨提示 更新时间,2016-02-01,现在淘宝换成了滑块验证了 ...
- Python实战:Python爬虫学习教程,获取电影排行榜
Python应用现在如火如荼,应用范围很广.因其效率高开发迅速的优势,快速进入编程语言排行榜前几名.本系列文章致力于可以全面系统的介绍Python语言开发知识和相关知识总结.希望大家能够快速入门并学习 ...
- 分享一个获取代理ip的python函数
分享一个获取代理ip的python函数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #coding:utf-8 from bs4 import Beaut ...
- Python爬虫实战---抓取图书馆借阅信息
Python爬虫实战---抓取图书馆借阅信息 原创作品,引用请表明出处:Python爬虫实战---抓取图书馆借阅信息 前段时间在图书馆借了很多书,借得多了就容易忘记每本书的应还日期,老是担心自己会违约 ...
随机推荐
- Mysql数据库的使用总结之ERROR 1146 (42S02)
在使用mysql数据库过程中,遇到了错误ERROR 1146 (42S02):Table doesn't exist,经过了两天,终于解决了这个问题.引起该错误的原因不同,对应的解决方法也不同.这里只 ...
- struts 文件上传
=================================== 实现单个文件上传 ====================================== 步骤1. 导入jar包: com ...
- node 异步编程
node 异步编程 我了解到的node异步编程可分成: 1.回调函数 2.pub/sub模式(发布/订阅模式) 3.promise 4.generator 5.async await 一.直接回调函数 ...
- 如何写一个HttpClient[1]——URI的处理
如何写一个HttpClient[1]--URI的处理 在翻阅apache的http client的代码的时候,看到org.apache.http.client.utils.URIBuilder.jav ...
- Azure Web Site 之 利用Azure Web site 发布网站
由于经常混迹于MSDN Azure论坛,少不了和一些外国朋友打交道.有的时候觉得还是有一些东西可以写出来与外国友人们分享下的, 所以就用一个开源项目建了一个英文blog项目. 在发布的时候,首选的就是 ...
- VB6SP6极度精简兼容绿色版
钟爱绿色小巧的软件.怀旧一下,整合了几个资源,做了一个VB6SP6极度精简绿色版. 压缩包大小5M. 网上的极度精简绿色版不是SP6的,特意在其基础上更新了SP6.不是单文件版,所谓单文件版不过是执行 ...
- ClickOnce添加自定义prerequisite
参考http://www.codeproject.com/Articles/15863/Add-your-own-custom-prerequisite-to-quot-ClickOnce 下载地址: ...
- js Date 关于时间获取问题
var date1 = new Date(); var timeFormat = { 'yyyy-mm-dd': date1 .toJSON().split('T')[0], //"2017 ...
- java反射小例子
package com.txwsqk.reflect; public class Car { private String brand; private String color; private i ...
- CSS 样式优先级
首先,选择器优先级顺序 优先级逐级增加的选择器列表: 通用选择器(*) 元素(类型)选择器 类选择器 属性选择器 伪类 ID 选择器 内联样式 !important 规则例外,该样式声明会覆盖CSS中 ...