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 splitlines使用技巧
Sep 06 Python
python基础入门学习笔记(Python环境搭建)
Jan 13 Python
Linux 下 Python 实现按任意键退出的实现方法
Sep 25 Python
Python中的id()函数指的什么
Oct 17 Python
Python实现将照片变成卡通图片的方法【基于opencv】
Jan 17 Python
TensorFlow如何实现反向传播
Feb 06 Python
Python基于递归实现电话号码映射功能示例
Apr 13 Python
一篇文章搞懂Python的类与对象名称空间
Dec 10 Python
pycharm new project变成灰色的解决方法
Jun 27 Python
django解决订单并发问题【推荐】
Jul 31 Python
如何在scrapy中捕获并处理各种异常
Sep 28 Python
Python识别验证码的实现示例
Sep 30 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
15个小时----从修改程序到自己些程序
2006/10/09 PHP
老生常谈文本文件和二进制文件的区别
2017/02/27 PHP
Laravel框架基础语法与知识点整理【模板变量、输出、include引入子视图等】
2019/12/03 PHP
javascript 极速 隐藏/显示万行表格列只需 60毫秒
2009/03/28 Javascript
JavaScript 内置对象属性及方法集合
2010/07/04 Javascript
jquery弹出关闭遮罩层实例
2013/08/06 Javascript
通过Javascript读取本地Excel文件内容的代码示例
2014/04/08 Javascript
js脚本实现数据去重
2014/11/27 Javascript
浅谈JSON中stringify 函数、toJosn函数和parse函数
2015/01/26 Javascript
利用Angularjs实现幻灯片效果
2016/09/07 Javascript
js实现无缝滚动图
2017/02/22 Javascript
Vue实现表格中对数据进行转换、处理的方法
2018/09/06 Javascript
node.js使用redis储存session的方法
2018/09/26 Javascript
Vue常用传值方式、父传子、子传父及非父子实例分析
2020/02/24 Javascript
[03:17]DOTA2-DPC中国联赛1月29日Recap集锦
2021/03/11 DOTA
Python import自定义模块方法
2015/02/12 Python
基于asyncio 异步协程框架实现收集B站直播弹幕
2016/09/11 Python
pycharm debug功能实现跳到循环末尾的方法
2018/11/29 Python
Python 使用 Pillow 模块给图片添加文字水印的方法
2019/08/30 Python
部署Django到阿里云服务器教程示例
2020/06/03 Python
python爬虫scrapy基于CrawlSpider类的全站数据爬取示例解析
2021/02/20 Python
pandas map(),apply(),applymap()区别解析
2021/02/24 Python
HTML5新表单元素_动力节点Java学院整理
2017/07/12 HTML / CSS
法国奢华女性时尚配饰网上商店:Monnier Frères
2016/08/27 全球购物
微软香港官网及网上商店:Microsoft HK
2016/09/01 全球购物
英国家电直销:Appliances Direct
2016/09/22 全球购物
为奢侈时尚带来了慈善元素:Olivela
2018/09/29 全球购物
俄罗斯童装网上商店:BebaKids
2020/06/06 全球购物
几个人围成一圈的问题
2013/09/26 面试题
什么是URL
2015/12/13 面试题
药店主任岗位责任制
2014/02/10 职场文书
《骆驼和羊》教学反思
2014/02/27 职场文书
2015年党支部书记工作总结
2015/05/21 职场文书
丧事主持词
2015/07/02 职场文书
《蚂蚁和蝈蝈》教学反思
2016/02/22 职场文书
Golang Web 框架Iris安装部署
2022/08/14 Python