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 条件判断的缩写方法
Sep 06 Python
python通过正则查找微博@(at)用户的方法
Mar 13 Python
matplotlib调整子图间距,调整整体空白的方法
Aug 03 Python
Python SQL查询并生成json文件操作示例
Aug 17 Python
Python模块、包(Package)概念与用法分析
May 31 Python
pandas计数 value_counts()的使用
Jun 24 Python
python中时间转换datetime和pd.to_datetime详析
Aug 11 Python
对Django的restful用法详解(自带的增删改查)
Aug 28 Python
python加密解密库cryptography使用openSSL生成的密匙加密解密
Feb 11 Python
Pandas之read_csv()读取文件跳过报错行的解决
Apr 21 Python
Python 实现敏感目录扫描的示例代码
May 21 Python
Python制作动态字符画的源码
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 随机数的产生、页面跳转、件读写、文件重命名、switch语句
2009/08/07 PHP
浅析iis7.5安装配置php环境
2015/05/10 PHP
phpStudy 2016 使用教程详解(支持PHP7)
2017/10/18 PHP
laravel5.6框架操作数据curd写法(查询构建器)实例分析
2020/01/26 PHP
PHP项目多语言配置平台实现过程解析
2020/05/18 PHP
经典的解除许多网站无法复制文字的绝招
2006/12/31 Javascript
用C/C++来实现 Node.js 的模块(一)
2014/09/24 Javascript
JavaScript 消息框效果【实现代码】
2016/04/27 Javascript
浅谈JQ中mouseover和mouseenter的区别
2016/09/13 Javascript
vue.js全局API之nextTick全面解析
2017/07/07 Javascript
微信小程序 循环及嵌套循环的使用总结
2017/09/26 Javascript
jQuery实现的点击按钮改变样式功能示例
2018/07/21 jQuery
详解JavaScript事件循环机制
2018/09/07 Javascript
浅谈Vuex注入Vue生命周期的过程
2019/05/20 Javascript
一起写一个即插即用的Vue Loading插件实现
2019/10/31 Javascript
JS 遍历 json 和 JQuery 遍历json操作完整示例
2019/11/11 jQuery
JavaScript实现联动菜单特效
2020/01/07 Javascript
微信小程序实现选择地址省市区三级联动
2020/06/21 Javascript
Vue中用JSON实现刷新界面不影响倒计时
2020/10/26 Javascript
vue的hash值原理也是table切换实例代码
2020/12/14 Vue.js
Python自动抢红包教程详解
2019/06/11 Python
Django单元测试中Fixtures用法详解
2020/02/25 Python
基于python爬取有道翻译过程图解
2020/03/31 Python
Python监听剪切板实现方法代码实例
2020/11/11 Python
HTML5里的placeholder属性使用实例和美化显示效果的方法
2014/04/23 HTML / CSS
2014年党员公开承诺践诺书
2014/03/25 职场文书
安全承诺书范文
2014/03/26 职场文书
优秀员工演讲稿
2014/05/19 职场文书
计算机毕业生求职信
2014/06/10 职场文书
读群众路线的心得体会
2014/09/03 职场文书
学习党的群众路线对照检查材料
2014/09/29 职场文书
租房协议书范例
2014/10/14 职场文书
2014年党委工作总结
2014/11/22 职场文书
大学生党性分析材料
2014/12/19 职场文书
消防安全月活动总结
2015/05/08 职场文书
校园安全主题班会
2015/08/12 职场文书