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中单、双下划线的区别总结
Dec 01 Python
查看django执行的sql语句及消耗时间的两种方法
May 29 Python
详解Python3.6安装psutil模块和功能简介
May 30 Python
python爬虫 urllib模块反爬虫机制UA详解
Aug 20 Python
Pandas-Cookbook 时间戳处理方式
Dec 07 Python
基于TensorBoard中graph模块图结构分析
Feb 15 Python
Python进程的通信Queue、Pipe实例分析
Mar 30 Python
python 爬虫如何正确的使用cookie
Oct 27 Python
如何基于Python pygame实现动画跑马灯
Nov 18 Python
Python实现一个论文下载器的过程
Jan 18 Python
python 使用openpyxl读取excel数据
Feb 18 Python
matplotlib之属性组合包(cycler)的使用
Feb 24 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的五种设计模式
2012/09/05 PHP
php使用filter过滤器验证邮箱 ipv6地址 url验证
2013/12/25 PHP
深入分析PHP引用(&)
2014/09/04 PHP
PHP多维数组转一维数组的简单实现方法
2015/12/23 PHP
PHP simplexml_load_file()函数讲解
2019/02/03 PHP
laravel添加前台跳转成功页面示例
2019/10/22 PHP
PHP 构造函数和析构函数原理与用法分析
2020/04/21 PHP
JavaScript 事件冒泡简介及应用
2010/01/11 Javascript
Jquery 表单验证类介绍与实例
2013/06/09 Javascript
Javascript合并表格中具有相同内容单元格示例
2013/08/11 Javascript
js 跳出页面的frameset框架示例介绍
2013/12/23 Javascript
JavaScript中对象属性的添加和删除示例
2014/05/12 Javascript
vue父子组件的嵌套的示例代码
2017/09/08 Javascript
Es6 Generator函数详细解析
2018/02/24 Javascript
浅谈angular4.0中路由传递参数、获取参数最nice的写法
2018/03/12 Javascript
使用Sonarqube扫描Javascript代码的示例
2018/12/26 Javascript
layui表格 列自动适应大小失效的解决方法
2019/09/06 Javascript
[00:27]DOTA2战队VP、Secret贺新春
2018/02/11 DOTA
使用Python操作Elasticsearch数据索引的教程
2015/04/08 Python
Python实现的质因式分解算法示例
2018/05/03 Python
Python实现的文本对比报告生成工具示例
2018/05/22 Python
Python3 venv搭建轻量级虚拟环境的步骤(图文)
2019/08/09 Python
Python 下载及安装详细步骤
2019/11/04 Python
windows中安装Python3.8.0的实现方法
2019/11/19 Python
Pyecharts绘制全球流向图的示例代码
2020/01/08 Python
python实现遍历文件夹图片并重命名
2020/03/23 Python
如何清空python的变量
2020/07/05 Python
欧舒丹俄罗斯官方网站:L’OCCITANE俄罗斯
2019/11/22 全球购物
解释DataSet(ds) 和 ds as DataSet 的含义
2014/07/27 面试题
酒店员工检讨书
2014/02/18 职场文书
课前一分钟演讲稿
2014/08/26 职场文书
校本培训个人总结
2015/02/28 职场文书
SQL Server数据定义——模式与基本表操作
2021/04/05 SQL Server
从np.random.normal()到正态分布的拟合操作
2021/06/02 Python
React实现动效弹窗组件
2021/06/21 Javascript
Go本地测试解耦任务拆解及沟通详解Go本地测试的思路沟通的重要性总结
2022/06/21 Golang