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开发中module模块用法实例分析
Nov 12 Python
全面了解python字符串和字典
Jul 07 Python
Python学习小技巧之列表项的推导式与过滤操作
May 20 Python
浅谈python和C语言混编的几种方式(推荐)
Sep 27 Python
Python语言实现百度语音识别API的使用实例
Dec 13 Python
python3.6实现学生信息管理系统
Feb 21 Python
Python算法中的时间复杂度问题
Nov 19 Python
使用Keras加载含有自定义层或函数的模型操作
Jun 10 Python
解决Python3.7.0 SSL低版本导致Pip无法使用问题
Sep 03 Python
Python自定义sorted排序实现方法详解
Sep 18 Python
解决Python 写文件报错TypeError的问题
Oct 23 Python
Python pandas求方差和标准差的方法实例
Aug 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分页函数
2006/10/09 PHP
PHP递归算法的详细示例分析
2013/02/19 PHP
Laravel实现用户注册和登录
2015/01/23 PHP
PHP中使用imagick生成PSD文件缩略图教程
2015/01/26 PHP
js实现的网站首页随机公告随机公告
2007/03/14 Javascript
jquery cookie插件代码类
2009/05/26 Javascript
js tab效果的实现代码
2009/12/26 Javascript
Jquery知识点一 Jquery的ready和Dom的onload的区别
2011/01/15 Javascript
JavaScript删除数组元素的方法
2015/03/20 Javascript
JQuery入门基础小实例(1)
2015/09/17 Javascript
使用jquery判断一个元素是否含有一个指定的类(class)实例
2017/02/12 Javascript
Angular.js ng-file-upload结合springMVC的使用教程
2017/07/10 Javascript
30分钟快速入门掌握ES6/ES2015的核心内容(上)
2018/04/18 Javascript
jQuery实现基本隐藏与显示效果的方法详解
2018/09/05 jQuery
微信小程序框架wepy之动态控制类名
2018/09/14 Javascript
Vuex模块化应用实践示例
2020/02/03 Javascript
vue实现学生信息管理系统
2020/05/30 Javascript
python计算最小优先级队列代码分享
2013/12/18 Python
剖析Python的Twisted框架的核心特性
2016/05/25 Python
python+django快速实现文件上传
2016/10/24 Python
python 实现红包随机生成算法的简单实例
2017/01/04 Python
python的命名规则知识点总结
2019/10/04 Python
python修改文件内容的3种方法详解
2019/11/15 Python
django2.2 和 PyMySQL版本兼容问题
2020/02/17 Python
python如何编写类似nmap的扫描工具
2020/11/06 Python
欧洲第一中国智能手机和平板电脑网上商店:CECT-SHOP
2018/01/08 全球购物
《威尼斯的小艇》教学反思
2014/02/17 职场文书
委托公证书范本
2014/04/03 职场文书
三八红旗手先进事迹材料
2014/05/13 职场文书
应届毕业生求职信范文
2014/07/07 职场文书
党员“一帮一”活动总结
2015/05/07 职场文书
公司要求试用期员工提交“述职报告”,该怎么写?
2019/07/17 职场文书
标准演讲稿格式结尾应该怎么书写?
2019/07/17 职场文书
css3实现背景图片颜色修改的多种方式
2021/04/13 HTML / CSS
python开发的自动化运维工具ansible详解
2021/08/07 Python
基于angular实现树形二级表格
2021/10/16 Javascript