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 ...
随机推荐
- Nginx--引用多配置文件
在nginx.conf的http模块,include 指定某个目录下的*.conf user nginx; worker_processes auto; error_log /var/log/ngin ...
- 洛谷P1174 打砖块 | CCPC2021网络赛8.28 1011 动态规划 分组背包
本文学习自洛谷社区 喜提CCPC2021网络赛原题 题意相当于是要在每一列中选若干个砖块打掉,消耗所需的子弹数并得到对应的得分.最大化k个子弹能得到的最大得分. 预处理出第 \(i\) 列 \(j\) ...
- PTA 天梯赛 L3-003 社交集群(并查集)
当你在社交网络平台注册时,一般总是被要求填写你的个人兴趣爱好,以便找到具有相同兴趣爱好的潜在的朋友.一个"社交集群"是指部分兴趣爱好相同的人的集合.你需要找出所有的社交集群. 输入 ...
- Linux一键安装docker脚本,含ubuntu和centos
将脚本保存为docker_install.sh,可以上传git,到服务器中,git clone下来后,sh docker_install.sh即可自动安装 ubuntu实现 # 以Ubuntu为例 # ...
- 黑池舞蹈节banner
- Liunx常用操作(六)-压缩与解压缩(打包/解包)
liunx上面的压缩与解压缩(打包/解包)有以下几种命令可以实现 源文件001.txt 如下: 一.zip 特点:方便的与Windows之间通用 打包命令: zip 001.zip 001.txt 解 ...
- docker容器常用操作
1.查看运行容器 docker ps: 2.查看所有容器 docker ps -a: 3.查看容器的日志 docker logs 容器名称/容器ID: 4.运行镜像 docker run --na ...
- 线性代数 · 矩阵 · Matlab | Moore-Penrose 伪逆矩阵代码实现
背景 - Moore-Penrose 伪逆矩阵: 对任意矩阵 \(A\in\mathbb C^{m\times n}\) ,其 Moore-Penrose 逆矩阵 \(A^+\in\mathbb C^ ...
- JVM 内存模型及特点总结
本文为博主原创,未经允许不得转载: JVM 内存区域主要分为线程私有区域[程序计数器.虚拟机栈.本地方法区].线程共享区域[JAVA 堆.方法区].直接内存. 线程私有数据区域生命周期与线程相同, 依 ...
- [转帖]堆表(HOT)和索引组织表(IOT)优缺点
转载于: https://www.ywnds.com/?p=7702 一.堆表和索引组织表 NOTE 堆表也可以称之为 HOT,索引组织表也可以称之为 IOT,下面没有特别说明,两者都是一个意思. ...