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 continue语句用法实例
Mar 11 Python
在Python中操作日期和时间之gmtime()方法的使用
May 22 Python
100行python代码实现跳一跳辅助程序
Jan 15 Python
python 获取当天凌晨零点的时间戳方法
May 22 Python
Python实现常见的回文字符串算法
Nov 14 Python
python使用matplotlib画柱状图、散点图
Mar 18 Python
详解Python list和numpy array的存储和读取方法
Nov 06 Python
python实现与redis交互操作详解
Apr 21 Python
python 实现两个npy档案合并
Jul 01 Python
python通过cython加密代码
Dec 11 Python
如何用Python徒手写线性回归
Jan 25 Python
Python趣味爬虫之用Python实现智慧校园一键评教
May 28 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无限分类(树形类)的深入分析
2013/06/02 PHP
PHP操作文件的一些基本函数使用示例
2014/11/18 PHP
php筛选不存在的图片资源
2015/04/28 PHP
PHP数据库操作二:memcache用法分析
2017/08/16 PHP
yii框架结合charjs实现统计30天数据的方法
2020/04/04 PHP
PHP设计模式(八)装饰器模式Decorator实例详解【结构型】
2020/05/02 PHP
ExtJS 2.0实用简明教程 之ExtJS版的Hello
2009/04/29 Javascript
javascript 表单规则集合对象
2009/07/21 Javascript
支持ie与FireFox的剪切板操作代码
2009/09/28 Javascript
学习ExtJS Column布局
2009/10/08 Javascript
新鲜出炉的js tips提示效果
2011/04/03 Javascript
jQuery表单验证插件formValidator(改进版)
2012/02/03 Javascript
如何在JavaScript中实现私有属性的写类方式(一)
2013/12/04 Javascript
jquery中的on方法使用介绍
2013/12/29 Javascript
jQuery 隐藏和显示 input 默认值示例
2014/06/03 Javascript
jQuery制作仿Mac Lion OS滚动条效果
2015/02/10 Javascript
javascript实现checkbox复选框实例代码
2016/01/10 Javascript
JS封装的选项卡TAB切换效果示例
2016/09/20 Javascript
js防刷新的倒计时代码 js倒计时代码
2017/09/06 Javascript
javascript trie前缀树的示例
2018/01/29 Javascript
微信小程序实现美团菜单
2018/06/06 Javascript
基于Angular中ng-controller父子级嵌套的相关属性详解
2018/10/08 Javascript
JS计算两个数组的交集、差集、并集、补集(多种实现方式)
2019/05/21 Javascript
JS如何操作DOM基于表格动态展示数据
2020/10/15 Javascript
Python MySQLdb Linux下安装笔记
2015/05/09 Python
Python使用add_subplot与subplot画子图操作示例
2018/06/01 Python
python将四元数变换为旋转矩阵的实例
2019/12/04 Python
Python操作注册表详细步骤介绍
2020/02/05 Python
python用tkinter实现一个gui的翻译工具
2020/10/26 Python
Javascript 高级手势使用介绍
2013/04/21 HTML / CSS
优秀小学生家长评语
2014/01/30 职场文书
营销总经理岗位职责
2014/02/02 职场文书
《爱的教育》读书心得
2014/11/08 职场文书
2014年企业工会工作总结
2014/11/12 职场文书
Python爬虫之爬取二手房信息
2021/04/27 Python
Pytorch中的数据集划分&正则化方法
2021/05/27 Python