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 07 Python
利用python批量修改word文件名的方法示例
Oct 17 Python
python 字典修改键(key)的几种方法
Aug 10 Python
Linux下Pycharm、Anaconda环境配置及使用踩坑
Dec 19 Python
python实现年会抽奖程序
Jan 22 Python
Python多项式回归的实现方法
Mar 11 Python
Python爬取爱奇艺电影信息代码实例
Nov 26 Python
详解Python3 中的字符串格式化语法
Jan 15 Python
Python如何把多个PDF文件合并代码实例
Feb 13 Python
浅谈pytorch池化maxpool2D注意事项
Feb 18 Python
基于tf.shape(tensor)和tensor.shape()的区别说明
Jun 30 Python
Python如何执行精确的浮点数运算
Jul 31 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
Ajax+PHP 边学边练 之二 实例
2009/11/24 PHP
使用xampp搭建运行php虚拟主机的详细步骤
2015/10/21 PHP
基于php判断客户端类型
2016/10/14 PHP
浅析php如何实现爬取数据原理
2018/09/27 PHP
JS+XML 省份和城市之间的联动实现代码
2009/10/14 Javascript
下载网站打开页面后间隔多少时间才显示下载链接地址的代码
2010/04/25 Javascript
Javascript图像处理—平滑处理实现原理
2012/12/28 Javascript
javascript实现TreeView 无刷新展开的实例代码
2013/07/13 Javascript
javascript中直接写php代码的方法
2013/07/31 Javascript
javascript中match函数的用法小结
2014/02/08 Javascript
jquerymobile局部渲染的各种刷新方法小结
2014/03/05 Javascript
java和javascript获取word文档的书签位置对比
2014/06/19 Javascript
用AngularJS来实现监察表单按钮的禁用效果
2016/11/02 Javascript
详解webpack分离css单独打包
2017/06/21 Javascript
AjaxUpLoad.js实现文件上传功能
2018/03/02 Javascript
Vue 实现双向绑定的四种方法
2018/03/16 Javascript
jQuery插件实现弹性运动完整示例
2018/07/07 jQuery
Node.js中读取TXT文件内容fs.readFile()用法
2018/10/10 Javascript
微信小程序开发之tabbar图标和颜色的实现
2018/10/17 Javascript
Python下线程之间的共享和释放示例
2015/05/04 Python
python 3.6 +pyMysql 操作mysql数据库(实例讲解)
2017/12/20 Python
Python开发最牛逼的IDE——pycharm
2018/08/01 Python
python用列表生成式写嵌套循环的方法
2018/11/08 Python
python 中的paramiko模块简介及安装过程
2020/02/29 Python
Python logging模块异步线程写日志实现过程解析
2020/06/30 Python
捷克浴室和厨房设备购物网站:SIKO
2018/08/11 全球购物
编写用C语言实现的求n阶阶乘问题的递归算法
2014/10/21 面试题
数据库面试要点基本概念
2013/10/31 面试题
特色蛋糕店创业计划书
2014/01/28 职场文书
优秀毕业自我鉴定
2014/02/15 职场文书
档案信息化建设方案
2014/05/16 职场文书
学术诚信承诺书
2014/05/26 职场文书
庆祝教师节主题班会
2015/08/17 职场文书
涨工资申请书应该怎么写?
2019/07/08 职场文书
详解python的异常捕获
2022/03/03 Python
如何创建一个创建MySQL数据库中的datetime类型
2022/03/21 MySQL