python多线程爬取西刺代理的示例代码


Posted in Python onJanuary 30, 2021

西刺代理是一个国内IP代理,由于代理倒闭了,所以我就把原来的代码放出来供大家学习吧。

镜像地址:https://www.blib.cn/url/xcdl.html

首先找到所有的tr标签,与class="odd"的标签,然后提取出来。

python多线程爬取西刺代理的示例代码

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

python多线程爬取西刺代理的示例代码

最后可以写出提取单一页面的代码,提取后将其保存到文件中。

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 格式。

python多线程爬取西刺代理的示例代码

最后再使用另一段代码,将其转换为一个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)

python多线程爬取西刺代理的示例代码

完整多线程版代码如下所示。

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多线程爬取代理的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python构造icmp echo请求和实现网络探测器功能代码分享
Jan 10 Python
python使用tcp实现局域网内文件传输
Mar 20 Python
Python查找最长不包含重复字符的子字符串算法示例
Feb 13 Python
python远程连接MySQL数据库
Apr 19 Python
python类的实例化问题解决
Aug 31 Python
pytorch 实现cross entropy损失函数计算方式
Jan 02 Python
python GUI库图形界面开发之PyQt5工具栏控件QToolBar的详细使用方法与实例
Feb 28 Python
150行python代码实现贪吃蛇游戏
Apr 24 Python
浅谈Python中threading join和setDaemon用法及区别说明
May 02 Python
python线程里哪种模块比较适合
Aug 02 Python
python解决OpenCV在读取显示图片的时候闪退的问题
Feb 23 Python
解决hive中导入text文件遇到的坑
Apr 07 Python
Python如何实现Paramiko的二次封装
Jan 30 #Python
python实现按日期归档文件
Jan 30 #Python
python使用Windows的wmic命令监控文件运行状况,如有异常发送邮件报警
Jan 30 #Python
如何用Django处理gzip数据流
Jan 29 #Python
Spy++的使用方法及下载教程
Jan 29 #Python
Python实现随机爬山算法
Jan 29 #Python
用pushplus+python监控亚马逊到货动态推送微信
Jan 29 #Python
You might like
PHP实现克鲁斯卡尔算法实例解析
2014/08/22 PHP
ecshop适应在PHP7的修改方法解决报错的实现
2016/11/01 PHP
PHP编辑器PhpStrom运行缓慢问题
2017/02/21 PHP
php多进程中的阻塞与非阻塞操作实例分析
2020/03/04 PHP
让广告代码不再影响你的网页加载速度
2006/07/07 Javascript
Javascript自定义排序 node运行 实例
2013/06/05 Javascript
js 通用订单代码
2013/12/23 Javascript
使用jQuery不判断浏览器高度解决iframe自适应高度问题
2014/12/16 Javascript
举例讲解Node.js中的Writable对象
2015/07/29 Javascript
基于javascript实现图片左右切换效果
2016/01/25 Javascript
JS组件系列之Bootstrap Icon图标选择组件
2016/01/28 Javascript
HTML5 JS压缩图片并获取图片BASE64编码上传
2020/11/16 Javascript
Angular4学习笔记之根模块与Ng模块
2017/09/09 Javascript
Node.js中读取TXT文件内容fs.readFile()用法
2018/10/10 Javascript
微信小程序解除10个请求并发限制
2018/12/18 Javascript
vue 地图可视化 maptalks 篇实例代码详解
2019/05/21 Javascript
es6函数之尾递归用法实例分析
2020/04/25 Javascript
基于JS实现table导出Excel并保留样式
2020/05/19 Javascript
[01:38]2018DOTA2亚洲邀请赛主赛事第二日现场采访 神秘商人痛陈生计不易
2018/04/05 DOTA
解读Python编程中的命名空间与作用域
2015/10/16 Python
Python 爬虫的工具列表大全
2016/01/31 Python
python+Django+apache的配置方法详解
2016/06/01 Python
python使用matplotlib绘图时图例显示问题的解决
2017/04/27 Python
Python实现最大子序和的方法示例
2019/07/05 Python
django之静态文件 django 2.0 在网页中显示图片的例子
2019/07/28 Python
python中turtle库的简单使用教程
2020/11/11 Python
Python使用cn2an实现中文数字与阿拉伯数字的相互转换
2021/03/02 Python
入党积极分子思想汇报
2014/01/02 职场文书
运动会入场词100字
2014/02/06 职场文书
户外拓展活动方案
2014/02/11 职场文书
党在我心中演讲稿
2014/09/02 职场文书
会议接待欢迎词范文
2015/01/26 职场文书
小程序后台PHP版本部署运行 LNMP+WNMP
2021/04/01 Servers
VUE使用draggable实现组件拖拽
2022/04/06 Vue.js
python绘制简单直方图(质量分布图)的方法
2022/04/21 Python
Python pyecharts案例超市4年数据可视化分析
2022/08/14 Python