python多线程运行,python多线程并发实现
导入请求
从bs4导入美丽的声音
导入什么是
导入telnetlib #验证代理的可用性
导入pymysql.cursors
随机导入
导入线程
基本URL= http://www。西祠戴笠。com/ #西刺首页
URL=[基本URL nn/,基本URL nt/,基本URL wn/,基本URL wt/]#西刺分组(更多)的互联网协议(互联网协议的缩写)信息链接列表
#请求头信息,必须有用户代理
headers={ User-Agent : Mozilla/5.0(Windows NT 6.1;win 64x 64)apple WebKit/537.36(KHTML,像壁虎一样)Chrome/63。0 .3239 .132 Safari/537.36 }
# proxy={ https : http://123。57 .85 .224:80 , http: http://123.57.85.224:80}
#获得与数据库的连接和游标
def get_cc():
# 连接关系型数据库数据库
connection=pymysql。连接(host= 127。0 .0 .1 ,端口=3306,用户=root ,密码=root ,数据库=iptables ,
charset=utf8 ,cursor class=pymysql。光标。字典光标)
# 通过光标创建游标
游标=connection .游标()
返回连接,光标
#保存ip _端口到数据库
定义保存互联网协议(Internet Protocol的缩写)端口(ip端口):
connection,cursor=get_cc()
尝试:
sql=插入iptable(ip_port)值( ip端口 )
游标。执行(sql)
除了:
打印(保存ip _端口失败!)
否则:
connection.commit()
connection.close()
#从数据库获得ip _端口
极好的获取互联网协议(Internet Protocol的缩写)端口():
connection,cursor=get_cc()
sql_get_id=select id,ip_port from iptable
游标。执行(sql_get_id)
#fetchone()是查询一条数据
id_list=cursor.fetchall()#得到所有的编号的字典列表
i=random.randint(0,len(id_list)-1)
id_num=id_list[i][id]
ip_port=id_list[i][ip_port] #获得所有可用的代理
返回编号号,ip端口号返回编号和互联网协议(Internet Protocol的缩写)端口:192.168.1.2:8080
#删除被封的ip _端口
定义删除互联网协议(Internet Protocol的缩写)端口(id编号):
connection,cursor=get_cc()
尝试:
SQL= delete from iptable where id= str(id _ num)
游标。执行(sql)
除了:
打印(删除ip _端口失败!)
否则:
connection.commit()
connection.close()
#获得代理
def get _ proxy(IP _ port):# IP _ port= 192。168 .2 .45:8088
proxy_ip=http:// ip端口
proxy_ips=https:// ip_port
proxy={ https :proxy _ IPS, http: proxy_ip}
返回代理
#获得对应全球资源定位器(统一资源定位器)分类的最大页码
def get_max_pagenum(url): #url是更多(分类)的链接,/nn,/nt.
response=requests.get(url,headers=headers)
状态代码=响应。状态代码
汤=美汤(回应。内容,“lxml”)
max_pagenum=soup.find(div ,attrs={class:pagination}).find_all(a)[-2].线
max_pagenum=int(max_pagenum)
返回max_pagenum
#验证代理是否有用,ip_port=192.168.2.45:8088
#每得到一个ip _端口都要进行验证,如果可用则保存,否则抛弃
定义验证代理列表(ip端口):
url=http://www.baidu.com
# proxy={ http : http:// IP _ port }
host,port=ip_port.split(:)
尝试:
# res=requests.get(url,headers=headers,proxies=proxies,timeout=5.0)
telnetlib .远程登录(主机,端口=端口,超时=5)
除了:
打印(- Failur: ip_port
否则:
#ips.append(ip_port)#这里应该存储到使用心得等数据库中
保存互联网协议(Internet Protocol的缩写)端口(ip端口)
def main(url,代理):#这里是更多的链接,/nn/1,/nn/2.
尝试:
response=requests.get(url,headers=headers,proxies=proxies,timeout=5.0)
状态代码=响应。状态代码#503说明互联网协议(互联网协议的缩写)被封
if(status_code!=requests.codes.ok):#响应的不是正常状态
#删除旧的代理ip _端口,这里还需要验证是否有病菌
旧互联网协议(Internet Protocol的缩写)端口=代理[http][7:]
删除互联网协议(Internet Protocol的缩写)端口(旧互联网协议(Internet Protocol的缩写)端口)
#修改代理,重新请求
id_num,ip_port=get_ip_port()
代理=获取代理(ip端口)
打印(字符串(代理))
返回
汤=美汤(回应。内容,“lxml”)
results=soup.find_all(tr)#遍历所有的tr
对于结果中的结果[1:]:#这里第一个tr子标签是th,所以会报错
tdlist=result.find_all(td )
ip_port=tdlist[1].字符串:" tdlist[2].线
验证代理列表(ip端口)
除了:
打印(请求异常.)
类myThread(线程。线程):
def __init__(自身,线程ID,名称,网址):
threading.Thread.__init__(self)
self.threadID=threadID
self.name=name
self.url=url
定义运行(自身):
print( executing thread: self . name)#不验证这行的可行性。
id_num,ip_port=get_ip_port()
代理=获取代理(ip端口)
max _ pagenum=get _ max _ pagenum(self . URL)
#print(max_pagenum)
对于范围内的I(1,max_pagenum):
url=self.url / str(i)
主(url,代理)
#4线程抓取杰西的ip代理池
if __name__==__main__ :
t1=myThread(1, Thread-1 ,URL[0])
t2=myThread(2, Thread-2 ,URL[1])
t3=myThread(3, Thread-3 ,urls[2])
t4=myThread(4, Thread-4 ,URL[3])
t1.start()
t2.start()
t3.start()
t4.start()
t1.join()
t2.join()
t3.join()
t4.join()
教你如何用Python抓取Westthorn的代理数据(第二部分)
/1前言/前几天,边肖发布了手把手的指导,教你如何使用Python抓取西部时代的代理数据(上)。可以戳进去看看。今天,边肖带你分析网页结构,提取网页数据。具体步骤如下。/2主页分析.
刺儿爬西刺代理ip过程
西刺代理爬虫1。新项目和爬虫零碎启动项目戴笠_ IPS.CD戴笠_ IPS/#爬虫名称和领域scrapy genspider.
巨蟒刺痒爬西刺特工iplpar基本rpar(ubuntu环境)-赖大大
步骤1:设置环境1.python2或python3 2。用pip安装下载scrapy框架,然后百度自己。主要内容不在这里。第二步:创建scrapy(简介)1。创建一个p。
pythonplus刺痒爬西刺特工iplparRpar
来自:https://www.cnblogs.com/lyc642983907/p/10739577.html步骤1:设置环境1.python2或python3 2。用pip安装和下载scrap。
python 3 Crawler-通过请求爬行Westthorn代理
从fake_useragent导入请求从lxml导入useragent从urllib.parse导入etree.
爬西刺ip代理池
好久没更新博客了~。今天我要更新一个小代码,用爬虫来爬Westthorn的代理池。先说要求。我们都是用python写一个小代码来抓取我们需要的信息,这是可取的。然而,有一些网站对我们的网络爬虫施加了一些限制。
拿西刺网的免费IP来说
写爬虫时经常需要切换IP,所以需要在数据维护数据库中维护一个IP池。这样就可以在需要的时候随机切换IP。我的方法是抓取Xithorn的免费IP,存入数据库,然后在scrapy项目中添加工具。
Scrapy爬西祠网站的ip
# scrapy抓取网站IP #-*-编码:UTF-8-*-从Xici导入Scrapy . items导入Xici项目类Xici SPI.
取Xigill.com的代理ip,存储在mysql数据库中。
需求:获取Xithorn代理的ip信息,包括ip地址、端口号和ip类型。xithorn:http://www.xicidaili.com/nn/,如何解决这个问题?通过分析页面结构和url设计,我们知道所有的数据都在这个页面上。
随机推荐
工作单元及其在ABP中的应用
工作单元(UoW)模式广泛应用于企业应用架构中。它可以收集领域模型中对象状态的变化,并在适当的时候将对象的变化一次性提交给同一数据库连接和事务上下文中的数据。
听命令(转弯)
信息来自指导纲要I .一般命令1的网络附录。CGMI给出了模块制造商的标识。2.在CGMM获取模块标识。该命令用于获取支持的频带(GSM 900、DCS 1800或PCS 1900).
Python-基本介绍
一、Linux基础——未来我们开发的程序阻止的电脑和服务器的简单操作二。http://www.cnblogs.com/wupeiqi/articles/5433893.htm的Python开发.
Hdu 4272 2012长春赛区网络赛dfs暴力astastast
t,一直以为要剪枝,后来发现在里面加个地图# include # include # include #就够了.
Winform学习-图片控件的应用(上一页,下一页)
例1:int I=0;string[]path=directory . get files(@ c:\ users \ administrator \ desktop \ picture Q.
01-android快速入门
Adan droid Debug Bridge Android Debug Bridge创建一个屏幕最小、启动速度快的模拟器。Android项目活动的目录结构:应用打开时显示的界面src:项目代码r.
用C (2) Isol写一个web服务器;o多路复用epoll。容器{ margin-right:auto;左边距:自动;左填充:15px填充-右侧:15px }。康塔.
Android开发的长途 ——说明Android事件分发机制(深入底层源代码)
这篇文章是系列文章,是我对Android开发漫漫征途的一点印象和记录。我会尽量按照先易后难的顺序来编这个系列。本系列引用和
2015年最新安卓学习路线图
Android是基于Linux的半开源操作系统,主要用于移动设备。它由谷歌和开放手持设备联盟开发和领导。2011年初的数据显示,才正式上市两年的Android已经成为全球最受欢迎的操作系统.
如何使用js设置和获取盒子模型的宽度和高度
第一个:dom.style.width/height.这个方法只能获得使用内联样式的元素的宽度和高度。第二个:dom.currentStyle.width/height.这个方法让浏览器渲染到.
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。