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中用sleep()方法操作时间的教程
May 22 Python
Java中重定向输出流实现用文件记录程序日志
Jun 12 Python
Python 判断 有向图 是否有环的实例讲解
Feb 01 Python
TensorFlow实现MLP多层感知机模型
Mar 09 Python
python将视频转换为全字符视频
Apr 26 Python
Python中的支持向量机SVM的使用(附实例代码)
Jun 26 Python
用python打印1~20的整数实例讲解
Jul 01 Python
Django REST framework内置路由用法
Jul 26 Python
pytorch 自定义卷积核进行卷积操作方式
Dec 30 Python
python中提高pip install速度
Feb 14 Python
django中related_name的用法说明
May 20 Python
利用Python pandas对Excel进行合并的方法示例
Nov 04 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
多重?l件?合查?(二)
2006/10/09 PHP
php编写的简单页面跳转功能实现代码
2013/11/27 PHP
CodeIgniter CLI模式简介
2014/06/17 PHP
phpstudy的php版本自由修改的方法
2017/10/18 PHP
PHP上传图片到数据库并显示的实例代码
2019/12/20 PHP
javascript学习笔记(八) js内置对象
2012/06/19 Javascript
动态加载脚本提升javascript性能
2014/02/24 Javascript
ECMAScript6的新特性箭头函数(Arrow Function)详细介绍
2014/06/07 Javascript
js去除输入框中所有的空格和禁止输入空格的方法
2014/06/09 Javascript
javascript学习笔记(五)原型和原型链详解
2014/10/08 Javascript
javascript表单验证大全
2015/08/12 Javascript
js方法数据验证的简单实例
2016/09/17 Javascript
浅谈Angular的$q, defer, promise
2016/12/20 Javascript
BootStrap实现轮播图效果(收藏)
2016/12/30 Javascript
Angularjs 与 bower安装和使用详解
2017/05/11 Javascript
简单实现js放大镜效果
2017/07/24 Javascript
你应该知道的几类npm依赖包管理详解
2017/10/06 Javascript
响应式框架Bootstrap栅格系统的实例
2017/12/19 Javascript
解决vue的变量在settimeout内部效果失效的问题
2018/08/30 Javascript
[03:24]2014DOTA2国际邀请赛 神秘商店生意火爆
2014/07/18 DOTA
[01:04]不如跳舞!DOTA2新英雄玛尔斯的欢乐日常
2019/03/11 DOTA
python通过shutil实现快速文件复制的方法
2015/03/14 Python
Python向excel中写入数据的方法
2019/05/05 Python
python将字典列表导出为Excel文件的方法
2019/09/02 Python
Python笔试面试题小结
2019/09/07 Python
根据tensor的名字获取变量的值方式
2020/01/04 Python
Roots加拿大官网:加拿大休闲服饰品牌
2016/10/24 全球购物
什么是数组名
2012/05/10 面试题
我爱我的祖国演讲稿
2014/05/04 职场文书
水利水电专业自荐信
2014/07/08 职场文书
学生会干部自我鉴定2014
2014/09/18 职场文书
2014年打非治违工作总结
2014/11/13 职场文书
2014年班组长工作总结
2014/11/20 职场文书
销售开票员岗位职责
2015/04/15 职场文书
高中生综合素质评价范文
2015/08/18 职场文书
vue配置型表格基于el-table拓展之table-plus组件
2022/04/12 Vue.js