Python爬虫简单运用爬取代理IP的实现


Posted in Python onDecember 01, 2020

功能1: 爬取西拉ip代理官网上的代理ip

环境:python3.8+pycharm
库:requests,lxml
浏览器:谷歌
IP地址:http://www.xiladaili.com/gaoni/

分析网页源码:

Python爬虫简单运用爬取代理IP的实现

选中div元素后右键找到Copy再深入子菜单找到Copy Xpath点击一下就复制到XPath

Python爬虫简单运用爬取代理IP的实现

我们复制下来的Xpth内容为:/html/body/div/div[3]/div[2]/table/tbody/tr[50]/td[1]
虽然可以查出来ip,但不利于程序自动爬取所有IP,利用谷歌XpathHelp测试一下

Python爬虫简单运用爬取代理IP的实现

从上图可以看出,只匹配到了一个Ip,我们稍作修改,即可达到目的
,有关xpath规则,可以参考下表;

Python爬虫简单运用爬取代理IP的实现

Python爬虫简单运用爬取代理IP的实现

Python爬虫简单运用爬取代理IP的实现

经过上面的规则学习后,我们修改为://*[@class=‘mt-0 mb-2 table-responsive']/table/tbody/tr/td[1],再利用xpthhelp工具验证一下:

Python爬虫简单运用爬取代理IP的实现

这样我们就可以爬取整个页面的Ip地址了,为了方便爬取更多的IP,我们继续往下翻页,找到翻页按钮:

Python爬虫简单运用爬取代理IP的实现

找规律,发现每翻一页,a标签下的href连接地址加1即可,python程序可以利用for循环解决翻页问题即可。
为了提高IP代理的质量,我们爬取评分高的IP来使用。找到评分栏下的Xpath路径,这里不再做详细介绍,思路参考上面找IP地址的思路,及XPath规则,过程参考下图:

Python爬虫简单运用爬取代理IP的实现

Python代码实现

代码可复制粘贴直接使用,如果出现报错,修改一下cookie。这里使用代理ip爬取,防止IP被封。当然这里的代码还是基础的,有空可以写成代理池,多任务去爬。当然还可以使用其它思路去实现,这里只做入门介绍。当有了这些代理IP后,我们可以用文件保存,或者保存到数据库中,根据实际使用情况而定,这里不做保存,只放到列表变量中保存。

import requests
from lxml import etree
import time


class XiLaIp_Spider:

  def __init__(self):
    self.url = 'http://www.xiladaili.com/gaoni/'
    self.headers = {
      'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36',
      'cookie': 'td_cookie=1539882751; csrftoken=lymOXQp49maLMeKXS1byEMMmsavQPtOCOUwy6WIbfMNazZW80xKKA8RW2Zuo6ssy; Hm_lvt_31dfac66a938040b9bf68ee2294f9fa9=1592547159; Hm_lvt_9bfa8deaeafc6083c5e4683d7892f23d=1592535959,1592539254,1592612217; Hm_lpvt_9bfa8deaeafc6083c5e4683d7892f23d=1592612332',
    }
    self.proxy = '116.196.85.150:3128'
    self.proxies = {
      "http": "http://%(proxy)s/" % {'proxy': self.proxy},
      "https": "http://%(proxy)s/" % {'proxy': self.proxy}
    }
    self.list1 = []

  def get_url(self):
    file = open('Ip_Proxy.txt', 'a', encoding='utf-8')
    ok_file = open('OkIp_Proxy.txt', 'a', encoding='utf-8')
    for index in range(50):
      time.sleep(3)
      try:
        res = requests.get(url=self.url if index == 0 else self.url + str(index) + "/", headers=self.headers,
                  proxies=self.proxies, timeout=10).text
      except:
        continue
      data = etree.HTML(res).xpath("//*[@class='mt-0 mb-2 table-responsive']/table/tbody/tr/td[1]")
      # '//*[@id="scroll"]/table/tbody/tr/td[1]'
      score_data = etree.HTML(res).xpath("//*[@class='mt-0 mb-2 table-responsive']/table/tbody/tr/td[8]")
      for i, j in zip(data, score_data):
        # file.write(i.text + '\n')
        score = int(j.text)
        # 追加评分率大于十万的ip
        if score > 100000:
          self.list1.append(i.text)
      set(self.list1)
    file.close()
    ok_ip = []
    for i in self.list1:
      try:
        # 验证代理ip是否有效
        res = requests.get(url='https://www.baidu.com', headers=self.headers, proxies={'http': 'http://' + i},
                  timeout=10)
        if res.status_code == 200:
          # ok_file.write(i + '\n')
          ok_ip.append(i)
      except:
        continue
    ok_file.close()
    return ok_ip

  def run(self):
    return self.get_url()


dl = XiLaIp_Spider()
dl.run()

到此这篇关于Python爬虫简单运用爬取代理IP的实现的文章就介绍到这了,更多相关Python 爬取代理IP内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python 12306抢火车票脚本 Python京东抢手机脚本
Feb 06 Python
Python入门学习指南分享
Apr 11 Python
python 反向输出字符串的方法
Jul 16 Python
Python 利用pydub库操作音频文件的方法
Jan 09 Python
python画图的函数用法以及技巧
Jun 28 Python
python中eval与int的区别浅析
Aug 11 Python
pytorch GAN伪造手写体mnist数据集方式
Jan 10 Python
python turtle工具绘制四叶草的实例分享
Feb 14 Python
python实现将中文日期转换为数字日期
Jul 14 Python
python 基于opencv实现高斯平滑
Dec 18 Python
深度学习tensorflow基础mnist
Apr 14 Python
python如何利用traceback获取详细的异常信息
Jun 05 Python
python爬虫请求头的使用
Dec 01 #Python
在pycharm创建scrapy项目的实现步骤
Dec 01 #Python
Python实现迪杰斯特拉算法并生成最短路径的示例代码
Dec 01 #Python
python 检测图片是否有马赛克
Dec 01 #Python
python中pop()函数的语法与实例
Dec 01 #Python
python爬虫多次请求超时的几种重试方法(6种)
Dec 01 #Python
python爬虫搭配起Bilibili唧唧的流程分析
Dec 01 #Python
You might like
php 上传文件类型判断函数(避免上传漏洞 )
2010/06/08 PHP
PHP新手入门学习方法
2011/05/08 PHP
解决phpmyadmin中缺少mysqli扩展问题的方法
2013/05/06 PHP
深入理解:XML与对象的序列化与反序列化
2013/06/08 PHP
Symfony2联合查询实现方法
2016/03/18 PHP
详谈PHP中的密码安全性Password Hashing
2017/02/04 PHP
基于PHP的登录和注册的功能的实现
2020/08/06 PHP
jquery checkbox全选、取消全选实现代码
2010/03/05 Javascript
jQuery学习笔记之jQuery的事件
2010/12/22 Javascript
Javascript全局变量var与不var的区别深入解析
2013/12/09 Javascript
jquery中append()与appendto()用法分析
2014/11/14 Javascript
Javascript解析URL方法详解
2014/12/05 Javascript
jQuery实现表单提交时判断的方法
2014/12/13 Javascript
jQuery中;function($,undefined) 前面的分号的用处
2014/12/17 Javascript
javascript判断css3动画结束 css3动画结束的回调函数
2015/03/10 Javascript
AngularJS单选框及多选框实现双向动态绑定
2016/01/13 Javascript
bootstrap table动态加载数据示例代码
2017/03/25 Javascript
JavaScript解析任意形式的json树型结构展示
2017/07/23 Javascript
react-native动态切换tab组件的方法
2018/07/07 Javascript
javascript 模块依赖管理的本质深入详解
2020/04/30 Javascript
在vue中封装的弹窗组件使用队列模式实现方法
2020/07/23 Javascript
小程序实现简单语音聊天的示例代码
2020/07/24 Javascript
Openlayers实现点闪烁扩散效果
2020/09/24 Javascript
python使用calendar输出指定年份全年日历的方法
2015/04/04 Python
python冒泡排序简单实现方法
2015/07/09 Python
如何使用python把ppt转换成pdf
2019/06/29 Python
PYTHON实现SIGN签名的过程解析
2019/10/28 Python
Python全面分析系统的时域特性和频率域特性
2020/02/26 Python
selenium+超级鹰实现模拟登录12306
2021/01/24 Python
python如何修改文件时间属性
2021/02/05 Python
Cole Haan官方网站:美国时尚潮流品牌
2017/12/06 全球购物
xml有哪些解析技术?区别是什么
2016/04/26 面试题
电厂职工自我鉴定
2014/02/20 职场文书
大学生优秀班干部事迹材料
2014/05/26 职场文书
2015年酒店年度工作总结
2015/05/23 职场文书
二年级作文之动物作文
2019/11/13 职场文书