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操作数据库之sqlite3打开数据库、删除、修改示例
Mar 13 Python
使用Python的Flask框架表单插件Flask-WTF实现Web登录验证
Jul 12 Python
详解python中requirements.txt的一切
Mar 03 Python
Python 访问限制 private public的详细介绍
Oct 16 Python
python字符串中匹配数字的正则表达式
Jul 03 Python
python 使用plt画图,去除图片四周的白边方法
Jul 09 Python
PYTHON实现SIGN签名的过程解析
Oct 28 Python
pandas中的数据去重处理的实现方法
Feb 10 Python
python实现将列表中各个值快速赋值给多个变量
Apr 02 Python
python如何处理程序无法打开
Jun 16 Python
Django实现翻页的示例代码
May 24 Python
python实现简单石头剪刀布游戏
Oct 24 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
MySQL时间字段究竟使用INT还是DateTime的说明
2012/02/27 PHP
php连接oracle数据库及查询数据的方法
2014/12/29 PHP
php微信公众号开发模式详解
2016/11/28 PHP
document.compatMode介绍
2009/05/21 Javascript
jQuery页面滚动浮动层智能定位实例代码
2011/08/23 Javascript
JavaScript代码应该放在HTML代码哪个位置比较好?
2014/10/16 Javascript
JQuery标签页效果的两个实例讲解(4)
2015/09/17 Javascript
vue-router:嵌套路由的使用方法
2017/02/21 Javascript
Bootstrap栅格系统使用方法及页面调整变形的解决方法
2017/03/10 Javascript
vue的全局提示框组件实例代码
2018/02/26 Javascript
ElementUI中el-tree节点的操作的实现
2020/02/27 Javascript
js 函数性能比较方法
2020/08/24 Javascript
vscode 调试 node.js的方法步骤
2020/09/15 Javascript
Python获取电脑硬件信息及状态的实现方法
2014/08/29 Python
Python类定义和类继承详解
2015/05/08 Python
对比Python中__getattr__和 __getattribute__获取属性的用法
2016/06/21 Python
Python字节单位转换实例
2019/12/05 Python
python如何更新包
2020/06/11 Python
HTML5 Canvas绘制五星红旗
2016/05/04 HTML / CSS
使用HTML5和CSS3制作一个模态框的示例
2018/03/07 HTML / CSS
bareMinerals官网:矿物质化妆品和护肤品
2018/02/04 全球购物
给排水专业应届生求职信
2013/10/12 职场文书
金融专业个人的自我评价
2013/10/18 职场文书
元旦获奖感言
2014/03/08 职场文书
毕业自我鉴定总结
2014/03/24 职场文书
学校班子个人对照检查材料思想汇报
2014/09/27 职场文书
教师党员学习十八届四中全会思想汇报
2014/11/03 职场文书
2015年个人实习工作总结
2014/12/12 职场文书
学校端午节活动总结
2015/02/11 职场文书
英语辞职信范文
2015/02/28 职场文书
建筑工地资料员岗位职责
2015/04/13 职场文书
结婚通知短信大全
2015/04/17 职场文书
2015年干部教育培训工作总结
2015/05/15 职场文书
防溺水主题班会教案
2015/08/12 职场文书
优秀学生主要事迹怎么写
2015/11/04 职场文书
关于Vue Router的10条高级技巧总结
2021/05/06 Vue.js