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命令行参数sys.argv使用示例
Jan 28 Python
python中二维阵列的变换实例
Oct 09 Python
Python中使用Boolean操作符做真值测试实例
Jan 30 Python
Python中用PIL库批量给图片加上序号的教程
May 06 Python
python timestamp和datetime之间转换详解
Dec 11 Python
实用自动化运维Python脚本分享
Jun 04 Python
pyspark.sql.DataFrame与pandas.DataFrame之间的相互转换实例
Aug 02 Python
python 实现读取一个excel多个sheet表并合并的方法
Feb 12 Python
Django模型修改及数据迁移实现解析
Aug 01 Python
简单了解python装饰器原理及使用方法
Dec 18 Python
pandas创建DataFrame的7种方法小结
Jun 14 Python
Python pexpect模块及shell脚本except原理解析
Aug 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获取后台Job管理的实现代码
2011/06/10 PHP
调整优化您的LAMP应用程序的5种简单方法
2011/06/26 PHP
php获取远程图片的两种 CURL方式和sockets方式获取远程图片
2011/11/07 PHP
php解压文件代码实现php在线解压
2014/02/13 PHP
PHP魔术方法使用方法汇总
2016/02/14 PHP
如何用jquery控制表格奇偶行及活动行颜色
2014/04/20 Javascript
Jquery搜索父元素操作方法
2015/02/10 Javascript
JS获取表格内指定单元格html内容的方法
2015/03/31 Javascript
jQuery实现仿路边灯箱广告图片轮播效果
2015/04/15 Javascript
javascript给span标签赋值的方法
2015/11/26 Javascript
JS中创建函数的三种方式及区别
2016/03/13 Javascript
js实现文字向上轮播功能
2017/01/13 Javascript
package.json文件配置详解
2017/06/15 Javascript
promise处理多个相互依赖的异步请求(实例讲解)
2017/08/03 Javascript
JavaScript事件处理程序详解
2017/09/19 Javascript
JS将时间秒转换成天小时分钟秒的字符串
2019/07/10 Javascript
Node.js HTTP服务器中的文件、图片上传的方法
2019/09/23 Javascript
js表达式与运算符简单操作示例
2020/02/15 Javascript
原生JavaScript实现进度条
2021/02/19 Javascript
[01:24:51]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS NewBee第二场
2014/05/26 DOTA
Python实现给文件添加内容及得到文件信息的方法
2015/05/28 Python
Python numpy.array()生成相同元素数组的示例
2018/11/12 Python
Python中低维数组填充高维数组的实现
2019/12/02 Python
Python列表如何更新值
2020/05/27 Python
Python制作运行进度条的实现效果(代码运行不无聊)
2021/02/24 Python
Pytorch之扩充tensor的操作
2021/03/04 Python
CSS3地图动态实例代码(圆圈向外扩散)
2018/06/15 HTML / CSS
Html5原生拖拽相关事件简介以及基础实现
2020/11/19 HTML / CSS
Sephora丝芙兰马来西亚官方网站:国际化妆品购物
2018/03/15 全球购物
ColourPop美国官网:卡拉泡泡,洛杉矶彩妆品牌
2019/04/28 全球购物
爱情保证书范文
2014/02/01 职场文书
《李时珍夜宿古寺》教学反思
2014/04/09 职场文书
5s标语大全
2014/06/23 职场文书
个人向公司借款协议书
2014/10/09 职场文书
安全生产工作汇报
2014/10/28 职场文书
2014年学校体育工作总结
2014/12/08 职场文书