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 实现堆排序算法代码
Jun 05 Python
介绍Python中的一些高级编程技巧
Apr 02 Python
简介Django中内置的一些中间件
Jul 24 Python
Python编码类型转换方法详解
Jul 01 Python
python算法演练_One Rule 算法(详解)
May 17 Python
Python实现的人工神经网络算法示例【基于反向传播算法】
Nov 11 Python
pyhton列表转换为数组的实例
Apr 04 Python
python3 读写文件换行符的方法
Apr 09 Python
python使用pandas处理大数据节省内存技巧(推荐)
May 05 Python
python网络编程:socketserver的基本使用方法实例分析
Apr 09 Python
基于python SMTP实现自动发送邮件教程解析
Jun 02 Python
如何将json数据转换为python数据
Sep 04 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强制下载文件函数
2016/08/24 PHP
PHP输出XML格式数据的方法总结
2017/02/08 PHP
php 多进程编程父进程的阻塞与非阻塞实例分析
2020/02/22 PHP
来自国外的页面JavaScript文件优化
2010/12/08 Javascript
div+css+js实现无缝滚动类似marquee无缝滚动兼容firefox
2013/08/29 Javascript
jQuery+css3实现Ajax点击后动态删除功能的方法
2015/08/10 Javascript
学习JavaScript设计模式之观察者模式
2020/04/22 Javascript
JS组件Bootstrap实现下拉菜单效果代码
2016/04/26 Javascript
JS常用函数和常用技巧小结
2016/10/15 Javascript
微信小程序 WXDropDownMenu组件详解及实例代码
2016/10/24 Javascript
JS常用加密编码与算法实例总结
2016/12/22 Javascript
js实现功能比较全面的全选和多选
2017/03/02 Javascript
JavaScript实现滑动导航栏效果
2017/08/30 Javascript
薪资那么高的Web前端必看书单
2017/10/13 Javascript
Vue使用json-server进行后端数据模拟功能
2018/04/17 Javascript
vue拖拽排序插件vuedraggable使用方法详解
2020/08/21 Javascript
对layui数据表格动态cols(字段)动态变化详解
2019/10/25 Javascript
基于ts的动态接口数据配置的详解
2019/12/18 Javascript
Pyramid添加Middleware的方法实例
2013/11/27 Python
Python内置的字符串处理函数详细整理(覆盖日常所用)
2014/08/19 Python
浅析Python中return和finally共同挖的坑
2017/08/18 Python
numpy中索引和切片详解
2017/12/15 Python
使用Python+Splinter自动刷新抢12306火车票
2018/01/03 Python
Selenium 模拟浏览器动态加载页面的实现方法
2018/05/16 Python
Python学习笔记之Zip和Enumerate用法实例分析
2019/08/14 Python
用Python批量把文件复制到另一个文件夹的实现方法
2019/08/16 Python
如何使用localstorage代替cookie实现跨域共享数据问题
2018/04/18 HTML / CSS
在canvas上实现元素图片镜像翻转动画效果的方法
2018/03/20 HTML / CSS
打造经典复古风格的品牌:Alice + Olivia(爱丽丝+奥利维亚)
2016/09/07 全球购物
Melijoe美国官网:法国奢侈童装购物网站
2017/04/19 全球购物
Java方面的关于数组和继承的笔面试题
2015/09/18 面试题
学生安全责任书
2014/04/15 职场文书
团代会邀请函
2015/02/02 职场文书
黄埔军校观后感
2015/06/10 职场文书
乡镇团代会开幕词
2016/03/04 职场文书
Mysql systemctl start mysqld报错的问题解决
2021/06/03 MySQL