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中处理字符串的相关的len()方法的使用简介
May 19 Python
浅谈django中的认证与登录
Oct 31 Python
Python常用库推荐
Dec 04 Python
Python信息抽取之乱码解决办法
Jun 29 Python
CentOS下使用yum安装python-pip失败的完美解决方法
Aug 16 Python
详解Python 协程的详细用法使用和例子
Jun 15 Python
python3实现名片管理系统
Nov 29 Python
Python对excel文档的操作方法详解
Dec 10 Python
python和mysql交互操作实例详解【基于pymysql库】
Jun 04 Python
Django实现发送邮件找回密码功能
Aug 12 Python
pandas抽取行列数据的几种方法
Dec 13 Python
python 实现两个变量值进行交换的n种操作
Jun 02 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 模拟$_PUT实现代码
2010/03/15 PHP
zen_cart实现支付前生成订单的方法
2016/05/06 PHP
PHP获取当前文件的父目录方法汇总
2016/07/21 PHP
Avengerls vs KG BO3 第一场2.18
2021/03/10 DOTA
仅img元素创建后不添加到文档中会执行onload事件的解决方法
2011/07/31 Javascript
javascript date格式化示例
2013/09/25 Javascript
JS+CSS 制作的超级简单的下拉菜单附图
2013/11/22 Javascript
类似php的js数组的in_array函数自定义方法
2013/12/27 Javascript
多引号嵌套的变量命名的问题
2014/05/09 Javascript
动态读取JSON解析键值对的方法
2014/06/03 Javascript
jQuery遍历对象、数组、集合实例
2014/11/08 Javascript
js实现的光标位置工具函数示例
2016/10/03 Javascript
AngularJS递归指令实现Tree View效果示例
2016/11/07 Javascript
Angular 4依赖注入学习教程之Injectable装饰器(六)
2017/06/04 Javascript
addeventlistener监听scroll跟touch(实例讲解)
2017/08/04 Javascript
微信小程序实现下拉刷新动画
2019/06/21 Javascript
使用layui的router来进行传参的实现方法
2019/09/06 Javascript
在vue中使用Echarts利用watch做动态数据渲染操作
2020/07/20 Javascript
在Debian下配置Python+Django+Nginx+uWSGI+MySQL的教程
2015/04/25 Python
Python找出文件中使用率最高的汉字实例详解
2015/06/03 Python
简要讲解Python编程中线程的创建与锁的使用
2016/02/28 Python
Python中使用logging和traceback模块记录日志和跟踪异常
2019/04/09 Python
python二维码操作:对QRCode和MyQR入门详解
2019/06/24 Python
python正则爬取某段子网站前20页段子(request库)过程解析
2019/08/10 Python
Python如何利用Har文件进行遍历指定字典替换提交的数据详解
2020/11/05 Python
解决pytorch 数据类型报错的问题
2021/03/03 Python
德国低价购买灯具和家具网站:Style-home.de
2016/11/25 全球购物
欧洲最大的球衣网上商店:Kitbag
2017/11/11 全球购物
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
2014/07/27 面试题
十佳大学生村官事迹
2014/01/09 职场文书
致裁判员加油稿
2014/02/08 职场文书
初中生操行评语大全
2014/04/24 职场文书
关于对大人不礼貌的检讨书
2014/09/29 职场文书
工作报告范文
2019/06/20 职场文书
你有一份《诚信考试承诺书》待领取
2019/11/13 职场文书
linux目录管理方法介绍
2022/06/01 Servers