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使用正则表达式检测密码强度源码分享
Jun 11 Python
详解Django+uwsgi+Nginx上线最佳实战
Mar 14 Python
python tkinter窗口最大化的实现
Jul 15 Python
利用Python产生加密表和解密表的实现方法
Oct 15 Python
python的json中方法及jsonpath模块用法分析
Dec 06 Python
pycharm 2019 最新激活方式(pycharm破解、激活)
Sep 22 Python
Django操作session 的方法
Mar 09 Python
aws 通过boto3 python脚本打pach的实现方法
May 10 Python
Python 使用 PyQt5 开发的关机小工具分享
Jul 16 Python
Python基于tkinter canvas实现图片裁剪功能
Nov 05 Python
详解利用python识别图片中的条码(pyzbar)及条码图片矫正和增强
Nov 17 Python
教你使用Python获取QQ音乐某个歌手的歌单
Apr 03 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 XMLWriter类的简单示例代码(RSS输出)
2011/09/30 PHP
PHP判断文章里是否有图片的简单方法
2014/07/26 PHP
ThinkPHP通过AJAX返回JSON的两种实现方法
2014/12/18 PHP
php使用memcoder将视频转成mp4格式的方法
2015/03/12 PHP
简介WordPress中用于获取首页和站点链接的PHP函数
2015/12/17 PHP
PHP中substr函数字符串截取用法分析
2016/01/07 PHP
PHP Filter过滤器全面解析
2016/08/09 PHP
PHP htmlentities()函数用法讲解
2019/02/25 PHP
彻底搞懂JS无缝滚动代码
2007/01/03 Javascript
jQuery EasyUI API 中文文档 - Form表单
2011/10/06 Javascript
JavaScript中的闭包介绍
2015/03/15 Javascript
jQuery实现背景滑动菜单
2016/12/02 Javascript
浅析jQuery操作select控件的取值和设值
2016/12/07 Javascript
实例解析angularjs的filter过滤器
2016/12/14 Javascript
jquery中绑定事件的异同
2017/02/28 Javascript
使用Node.js实现简易MVC框架的方法
2017/08/07 Javascript
JavaScript 中Date对象的格式化代码方法汇总
2017/09/06 Javascript
Webpack path与publicPath的区别详解
2018/05/03 Javascript
JavaScript中arguments的使用方法详解
2020/12/20 Javascript
python使用pil生成缩略图的方法
2015/03/26 Python
Python代码调试的几种方法总结
2015/04/15 Python
Python中super关键字用法实例分析
2015/05/28 Python
Python中easy_install 和 pip 的安装及使用
2017/06/05 Python
tensorflow输出权重值和偏差的方法
2018/02/10 Python
python pandas 组内排序、单组排序、标号的实例
2018/04/12 Python
python读取LMDB中图像的方法
2018/07/02 Python
Python 实现某个功能每隔一段时间被执行一次的功能方法
2018/10/14 Python
python中多个装饰器的调用顺序详解
2019/07/16 Python
Python 调用 Windows API COM 新法
2019/08/22 Python
CSS Grid布局教程之什么是网格布局
2014/12/30 HTML / CSS
美国第二大团购网站:LivingSocial
2016/07/24 全球购物
3分钟英语演讲稿
2014/04/29 职场文书
工厂采购员岗位职责
2015/04/07 职场文书
行政司机岗位职责
2015/04/10 职场文书
幼儿园安全工作总结2015
2015/04/20 职场文书
Axios取消重复请求的方法实例详解
2021/06/15 Javascript