Python 多线程爬取西刺代理
西刺代理是一个国内IP代理,由于代理倒闭了,所以我就把原来的代码放出来供大家学习吧。
首先找到所有的tr标签,与class="odd"的标签,然后提取出来。

然后再依次找到tr标签里面的所有td标签,然后只提取出里面的[1,2,5,9]这四个标签的位置,其他的不提取。

最后可以写出提取单一页面的代码,提取后将其保存到文件中。
import sys,re,threading
import requests,lxml
from queue import Queue
import argparse
from bs4 import BeautifulSoup
head = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.100 Safari/537.36"}
if __name__ == "__main__":
ip_list=[]
fp = open("SpiderAddr.json","a+",encoding="utf-8")
url = "https://www.blib.cn/url/xcdl.html"
request = requests.get(url=url,headers=head)
soup = BeautifulSoup(request.content,"lxml")
data = soup.find_all(name="tr",attrs={"class": re.compile("|[^odd]")})
for item in data:
soup_proxy = BeautifulSoup(str(item),"lxml")
proxy_list = soup_proxy.find_all(name="td")
for i in [1,2,5,9]:
ip_list.append(proxy_list[i].string)
print("[+] 爬行列表: {} 已转存".format(ip_list))
fp.write(str(ip_list) + '\n')
ip_list.clear()
爬取后会将文件保存为 SpiderAddr.json 格式。

最后再使用另一段代码,将其转换为一个SSR代理工具直接能识别的格式,{'http': 'http://119.101.112.31:9999'}
import sys,re,threading
import requests,lxml
from queue import Queue
import argparse
from bs4 import BeautifulSoup
if __name__ == "__main__":
result = []
fp = open("SpiderAddr.json","r")
data = fp.readlines()
for item in data:
dic = {}
read_line = eval(item.replace("\n",""))
Protocol = read_line[2].lower()
if Protocol == "http":
dic[Protocol] = "http://" + read_line[0] + ":" + read_line[1]
else:
dic[Protocol] = "https://" + read_line[0] + ":" + read_line[1]
result.append(dic)
print(result)

完整多线程版代码如下所示。
import sys,re,threading
import requests,lxml
from queue import Queue
import argparse
from bs4 import BeautifulSoup
head = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.100 Safari/537.36"}
class AgentSpider(threading.Thread):
def __init__(self,queue):
threading.Thread.__init__(self)
self._queue = queue
def run(self):
ip_list=[]
fp = open("SpiderAddr.json","a+",encoding="utf-8")
while not self._queue.empty():
url = self._queue.get()
try:
request = requests.get(url=url,headers=head)
soup = BeautifulSoup(request.content,"lxml")
data = soup.find_all(name="tr",attrs={"class": re.compile("|[^odd]")})
for item in data:
soup_proxy = BeautifulSoup(str(item),"lxml")
proxy_list = soup_proxy.find_all(name="td")
for i in [1,2,5,9]:
ip_list.append(proxy_list[i].string)
print("[+] 爬行列表: {} 已转存".format(ip_list))
fp.write(str(ip_list) + '\n')
ip_list.clear()
except Exception:
pass
def StartThread(count):
queue = Queue()
threads = []
for item in range(1,int(count)+1):
url = "https://www.xicidaili.com/nn/{}".format(item)
queue.put(url)
print("[+] 生成爬行链接 {}".format(url))
for item in range(count):
threads.append(AgentSpider(queue))
for t in threads:
t.start()
for t in threads:
t.join()
# 转换函数
def ConversionAgentIP(FileName):
result = []
fp = open(FileName,"r")
data = fp.readlines()
for item in data:
dic = {}
read_line = eval(item.replace("\n",""))
Protocol = read_line[2].lower()
if Protocol == "http":
dic[Protocol] = "http://" + read_line[0] + ":" + read_line[1]
else:
dic[Protocol] = "https://" + read_line[0] + ":" + read_line[1]
result.append(dic)
return result
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("-p","--page",dest="page",help="指定爬行多少页")
parser.add_argument("-f","--file",dest="file",help="将爬取到的结果转化为代理格式 SpiderAddr.json")
args = parser.parse_args()
if args.page:
StartThread(int(args.page))
elif args.file:
dic = ConversionAgentIP(args.file)
for item in dic:
print(item)
else:
parser.print_help()
Python 多线程爬取西刺代理的更多相关文章
- python scrapy 爬取西刺代理ip(一基础篇)(ubuntu环境下) -赖大大
第一步:环境搭建 1.python2 或 python3 2.用pip安装下载scrapy框架 具体就自行百度了,主要内容不是在这. 第二步:创建scrapy(简单介绍) 1.Creating a p ...
- python+scrapy 爬取西刺代理ip(一)
转自:https://www.cnblogs.com/lyc642983907/p/10739577.html 第一步:环境搭建 1.python2 或 python3 2.用pip安装下载scrap ...
- 使用XPath爬取西刺代理
因为在Scrapy的使用过程中,提取页面信息使用XPath比较方便,遂成此文. 在b站上看了介绍XPath的:https://www.bilibili.com/video/av30320885?fro ...
- Python四线程爬取西刺代理
import requests from bs4 import BeautifulSoup import lxml import telnetlib #验证代理的可用性 import pymysql. ...
- 手把手教你使用Python爬取西刺代理数据(下篇)
/1 前言/ 前几天小编发布了手把手教你使用Python爬取西次代理数据(上篇),木有赶上车的小伙伴,可以戳进去看看.今天小编带大家进行网页结构的分析以及网页数据的提取,具体步骤如下. /2 首页分析 ...
- Scrapy爬取西刺代理ip流程
西刺代理爬虫 1. 新建项目和爬虫 scrapy startproject daili_ips ...... cd daili_ips/ #爬虫名称和domains scrapy genspider ...
- python3爬虫-通过requests爬取西刺代理
import requests from fake_useragent import UserAgent from lxml import etree from urllib.parse import ...
- 爬取西刺ip代理池
好久没更新博客啦~,今天来更新一篇利用爬虫爬取西刺的代理池的小代码 先说下需求,我们都是用python写一段小代码去爬取自己所需要的信息,这是可取的,但是,有一些网站呢,对我们的网络爬虫做了一些限制, ...
- 爬取西刺网的免费IP
在写爬虫时,经常需要切换IP,所以很有必要自已在数据维护库中维护一个IP池,这样,就可以在需用的时候随机切换IP,我的方法是爬取西刺网的免费IP,存入数据库中,然后在scrapy 工程中加入tools ...
- scrapy爬取西刺网站ip
# scrapy爬取西刺网站ip # -*- coding: utf-8 -*- import scrapy from xici.items import XiciItem class Xicispi ...
随机推荐
- oracle表空间已满解决
在日常的oralce使用中最长遇到的问题就是oralce的表空间满了,数据无法写入报错,这种情况下通常是磁盘没有足够的空间或者表空间的数据文件达到32G(linux最大限制单个文件不超过32G)无法继 ...
- 1、springboot工程新建(单模块)
系列导航 springBoot项目打jar包 1.springboot工程新建(单模块) 2.springboot创建多模块工程 3.springboot连接数据库 4.SpringBoot连接数据库 ...
- 《深入理解计算机系统》(CSAPP)读书笔记 —— 第七章 链接
链接( Clinking)是将各种代码和数据片段收集并组合成为一个单一文件的过程,这个文件可被加载(复制)到内存并执行.链接可以执行于编译时( compile time),也就是在源代码被翻译成机器代 ...
- 接口自动化复习第四天利用正则和faker提取替换变量值
在做接口自动化测试的时候,我们经常会遇到,有些字段利用随机生成数据就行了,不需要自己去构造测试数据.今天我就是要python中的第三方库faker来构造随机数,其次使用正则表达式来提取变量. 首先在接 ...
- Ribbon 负载均衡源码解读
转载请注明出处: 1.什么是Ribbon 是 Netflix 发布的一个负载均衡器,有助于控制 HTTP 和 TCP客户端行为.在 SpringCloud 中, nacos一般配合Ribbon进行使用 ...
- HashMap集合遍历随机性问题分析
一.原因分析 1.1 HashMap对象的遍历 HashMap的遍历是通过此类中字段table数组进行顺序遍历,原因如下所示: 1 #HashMap 迭代遍历源码 2 public final boo ...
- 使用WTM框架创建博客系统后台并在云服务器发布
阅读导航 关于lqclass.com 博客后台前后端部署 2.1 已部署访问链接 2.2 nginx 部署 2.2.1 后台后端发布 2.2.2 后台前端发布 2.2.3 云服务器部署 下次分享 1. ...
- 配置Maven项目的pom.xml时遇到input contained no data问题
1.问题 2.解决 我发现每次当我修改一些部分之后,就会遇到这个问题 我遵循了他的建议重新排列标记属性,然后重新加载就解决了报错 个人怀疑是修改后并没有识别之类的? 最终原因:是我在Maven项目中的 ...
- ONVIF网络摄像头(IPC)客户端开发—ONVIF介绍
1.前言: 网上已经有很多关于ONVIF开发的资料,这里概括介绍一下ONVIF协议以及介绍一下我自己在开发ONVIF网络摄像头的一些流程和经验,做个开发记录和经验总结,以备将来查看,也可供他人参考 ...
- 【中介者模式(Mediator)】使用Java实现中介者模式
引言 中介者,何为中介者,顾名思义就是我们的在处理A和B之间的关系的时候,引入一个中间人,来处理这两者之间的关系,例如生活中我们需要去租房,买房,都会有中介,来处理房东和租客之间的协调关系,这个就是中 ...