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 相关文章推荐
Windows系统下安装Python的SSH模块教程
Feb 05 Python
介绍Python中内置的itertools模块
Apr 29 Python
使用Python简单的实现树莓派的WEB控制
Feb 18 Python
Python爬虫爬验证码实现功能详解
Apr 14 Python
Python实现获取照片拍摄日期并重命名的方法
Sep 30 Python
pyqt5自定义信号实例解析
Jan 31 Python
Python Xml文件添加字节属性的方法
Mar 31 Python
Django实现学生管理系统
Feb 26 Python
详解python运行三种方式
May 13 Python
机器学习实战之knn算法pandas
Jun 22 Python
Python 时间戳之获取整点凌晨时间戳的操作方法
Jan 28 Python
Django基于Models定制Admin后台实现过程解析
Nov 11 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+Ajax异步通讯实现用户名邮箱验证是否已注册( 2种方法实现)
2011/12/28 PHP
PHP防CC攻击实现代码
2011/12/29 PHP
php数组删除元素示例
2014/03/21 PHP
php判断文件夹是否存在不存在则创建
2015/04/09 PHP
jQuery ajax调用WCF服务实例
2014/07/16 Javascript
10分钟学会写Jquery插件实例教程
2014/09/06 Javascript
js代码实现无缝滚动(文字和图片)
2015/08/20 Javascript
通过XMLHttpRequest和jQuery实现ajax的几种方式
2015/08/28 Javascript
初识angular框架后的所思所想
2016/02/19 Javascript
JavaScript学习笔记之数组随机排序
2016/03/23 Javascript
AngularJS使用ng-repeat和ng-if实现数据的删选显示效果示例【适用于表单数据的显示】
2016/12/13 Javascript
angular-ui-sortable实现可拖拽排序列表
2016/12/28 Javascript
jquery实现手机端单店铺购物车结算删除功能
2017/02/22 Javascript
angular2路由切换改变页面title的示例代码
2017/08/23 Javascript
利用jQuery+localStorage实现一个简易的计时器示例代码
2017/12/25 jQuery
JS实现统计字符串中字符出现个数及最大个数功能示例
2018/06/04 Javascript
JSONP原理及应用实例详解
2018/09/13 Javascript
微信小程序module.exports模块化操作实例浅析
2018/12/20 Javascript
微信小程序跳转到其他网页(外部链接)的实现方法
2019/09/20 Javascript
在Express中提供静态文件的实现方法
2019/10/17 Javascript
JavaScript多种滤镜算法实现代码实例
2019/12/10 Javascript
extjs图表绘制之条形图实现方法分析
2020/03/06 Javascript
react-router-dom 嵌套路由的实现
2020/05/02 Javascript
Nest.js散列与加密实例详解
2021/02/24 Javascript
Python numpy 提取矩阵的某一行或某一列的实例
2018/04/03 Python
python常用数据重复项处理方法
2019/11/22 Python
Selenium关闭INFO:CONSOLE提示的解决
2020/12/07 Python
web字体加载方案优化小结
2019/11/29 HTML / CSS
Myprotein丹麦官网:欧洲第一运动营养品牌
2019/04/15 全球购物
劳模事迹材料范文
2014/12/24 职场文书
小学大队长竞选稿
2015/11/20 职场文书
《认识年月日》教学反思
2016/02/19 职场文书
浅谈tf.train.Saver()与tf.train.import_meta_graph的要点
2021/05/26 Python
世界十大评分最高的动漫,CLANNAD上榜,第八赚足人们眼泪
2022/03/18 日漫
USB TYPE-C 或将成为所有智能手机充电标准
2022/04/21 数码科技
win10如何开启ahci模式?win10开启ahci模式详细操作教程
2022/07/23 数码科技