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实现颜色空间转换程序(Tkinter)
Dec 31 Python
python 异常处理总结
Oct 18 Python
解决Python中字符串和数字拼接报错的方法
Oct 23 Python
Python之Web框架Django项目搭建全过程
May 02 Python
Python爬取附近餐馆信息代码示例
Dec 09 Python
Python实现读取txt文件并转换为excel的方法示例
May 17 Python
python 产生token及token验证的方法
Dec 26 Python
Python 实现文件打包、上传与校验的方法
Feb 13 Python
python3对接mysql数据库实例详解
Apr 30 Python
如何在django中添加日志功能
Feb 06 Python
如何解决cmd运行python提示不是内部命令
Jul 01 Python
Python数据可视化之基于pyecharts实现的地理图表的绘制
Jun 10 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注释实例技巧
2008/10/03 PHP
Yii2框架自定义验证规则操作示例
2019/02/08 PHP
yii 框架实现按天,月,年,自定义时间段统计数据的方法分析
2020/04/04 PHP
filters.revealTrans.Transition使用方法小结
2010/08/19 Javascript
js输入框邮箱自动提示功能代码实现
2013/12/10 Javascript
vuejs父子组件通信的问题
2017/01/11 Javascript
微信小程序 ecshop地址三级联动实现实例代码
2017/02/28 Javascript
mint-ui的search组件在键盘显示搜索按钮的实现方法
2017/10/27 Javascript
jQuery实现文字超过1行、2行或规定的行数时自动加省略号的方法
2018/03/28 jQuery
bootstrap table实现合并单元格效果
2018/12/24 Javascript
详解key在Vue列表渲染时究竟起到了什么作用
2019/04/20 Javascript
教你30秒发布一个TypeScript包到NPM的方法步骤
2019/07/22 Javascript
JS对日期操作封装代码实例
2019/11/08 Javascript
vue+vant使用图片预览功能ImagePreview的问题解决
2020/04/10 Javascript
Vue结合路由配置递归实现菜单栏功能
2020/06/16 Javascript
详解基于element的区间选择组件校验(交易金额)
2021/01/07 Javascript
用Python编程实现语音控制电脑
2014/04/01 Python
python实现的jpg格式图片修复代码
2015/04/21 Python
Python中的浮点数原理与运算分析
2017/10/12 Python
利用python为运维人员写一个监控脚本
2018/03/25 Python
Python中defaultdict与lambda表达式用法实例小结
2018/04/09 Python
python向字符串中添加元素的实例方法
2019/06/28 Python
python中while和for的区别总结
2019/06/28 Python
python使用 request 发送表单数据操作示例
2019/09/25 Python
python求绝对值的三种方法小结
2019/12/04 Python
一款纯css3实现的竖形二级导航的实例教程
2014/12/11 HTML / CSS
国际性能运动服装品牌:Dare 2b
2018/07/27 全球购物
快时尚眼镜品牌,全国连锁眼镜店:LOHO眼镜生活
2018/10/08 全球购物
一个SQL面试题
2014/08/21 面试题
C#面试题问题集
2016/04/02 面试题
ruby如何进行集成操作?Ruby能进行多重继承吗?
2013/10/16 面试题
青年文明号事迹材料
2014/01/18 职场文书
党的群众路线批评与自我批评范文
2014/10/16 职场文书
2014年初一班主任工作总结
2014/11/08 职场文书
mysql insert 存在即不插入语法说明
2022/03/25 MySQL
js前端面试常见浏览器缓存强缓存及协商缓存实例
2022/06/21 Javascript