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之一个免费的实验室
Sep 14 Python
Python分治法定义与应用实例详解
Jul 28 Python
Python中的id()函数指的什么
Oct 17 Python
Django对数据库进行添加与更新的例子
Jul 12 Python
基于python二叉树的构造和打印例子
Aug 09 Python
Python 中 -m 的典型用法、原理解析与发展演变
Nov 11 Python
python 解决mysql where in 对列表(list,,array)问题
Jun 06 Python
Django 构建模板form表单的两种方法
Jun 14 Python
Python开发入门——迭代的基本使用
Sep 03 Python
Python读取Excel一列并计算所有对象出现次数的方法
Sep 04 Python
python pip如何手动安装二进制包
Sep 30 Python
Python文件操作及内置函数flush原理解析
Oct 13 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
人大复印资料处理程序_查询篇
2006/10/09 PHP
我的论坛源代码(五)
2006/10/09 PHP
web目录下不应该存在多余的程序(安全考虑)
2012/05/09 PHP
PHP编译安装时常见错误解决办法
2015/05/28 PHP
PHP的Yii框架的基本使用示例
2015/08/21 PHP
thinkPHP模型初始化实例分析
2015/12/03 PHP
ThinkPHP框架里隐藏index.php
2016/04/12 PHP
使用PHP连接多种数据库的实现代码(mysql,access,sqlserver,Oracle)
2016/12/21 PHP
Prototype ObjectRange对象学习
2009/07/19 Javascript
Javascript select下拉框操作常用方法
2009/11/09 Javascript
JS模拟面向对象全解(一、类型及传递)
2011/07/13 Javascript
js获取当前页面路径示例讲解
2014/01/08 Javascript
nodejs中简单实现Javascript Promise机制的实例
2014/12/06 NodeJs
javascript+HTML5自定义元素播放焦点图动画
2016/02/21 Javascript
js实现当鼠标移到表格上时显示这一格全部内容的代码
2016/06/12 Javascript
js实现左右两侧浮动广告
2018/07/09 Javascript
快速解决vue-cli在ie9+中无效的问题
2018/09/04 Javascript
django使用channels2.x实现实时通讯
2018/11/28 Javascript
关于RxJS Subject的学习笔记
2018/12/05 Javascript
layer.open提交子页面的form和layedit文本编辑内容的方法
2019/09/27 Javascript
vue项目使用高德地图的定位及关键字搜索功能的实例代码(踩坑经验)
2020/03/07 Javascript
Python获取Windows或Linux主机名称通用函数分享
2014/11/22 Python
Python实现更改图片尺寸大小的方法(基于Pillow包)
2016/09/19 Python
python实时分析日志的一个小脚本分享
2017/05/07 Python
pandas中DataFrame修改index、columns名的方法示例
2019/08/02 Python
Python3爬虫中关于Ajax分析方法的总结
2020/07/10 Python
matplotlib 画双轴子图无法显示x轴的解决方法
2020/07/27 Python
Html5 postMessage实现跨域消息传递
2016/03/11 HTML / CSS
初中毕业典礼演讲稿
2014/09/09 职场文书
党性分析自查总结
2014/10/14 职场文书
2014幼儿园保育员工作总结
2014/11/10 职场文书
2014年数学教师工作总结
2014/12/03 职场文书
党员证明模板
2015/06/19 职场文书
傅雷家书读书笔记
2015/06/29 职场文书
Python的代理类实现,控制访问和修改属性的权限你都了解吗
2022/03/21 Python
Mysql数据库group by原理详解
2022/07/07 MySQL