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登陆asp网站页面的实现代码
Jan 14 Python
Python中强大的命令行库click入门教程
Dec 26 Python
浅谈python中的实例方法、类方法和静态方法
Feb 17 Python
利用Python如何实现数据驱动的接口自动化测试
May 11 Python
删除python pandas.DataFrame 的多重index实例
Jun 08 Python
Python叠加两幅栅格图像的实现方法
Jul 05 Python
python tkinter窗口最大化的实现
Jul 15 Python
python主线程与子线程的结束顺序实例解析
Dec 17 Python
Pytoch之torchvision.transforms图像变换实例
Dec 30 Python
python3中使用__slots__限定实例属性操作分析
Feb 14 Python
基于pycharm实现批量修改变量名
Jun 02 Python
Python 如何解决稀疏矩阵运算
May 26 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
dedecms后台验证码总提示错误的解决方法
2007/03/21 PHP
解决dede生成静态页和动态页转换的一些问题,及火车采集入库生成动态的办法
2007/03/29 PHP
php socket方式提交的post详解
2008/07/19 PHP
PHP curl模拟浏览器采集阿里巴巴的实现代码
2011/04/20 PHP
php中autoload的用法总结
2013/11/08 PHP
php打乱数组二维数组多维数组的简单实例
2016/06/17 PHP
PHP常用操作类之通信数据封装类的实现
2017/07/16 PHP
laravel中数据显示方法(默认值和下拉option默认选中)
2019/10/11 PHP
javascript 获取所有id中包含某关键字的控件的实现代码
2010/11/25 Javascript
图片动画横条广告带上下滚动可自定义图片、链接等等
2013/10/20 Javascript
jquery复选框全选/取消示例
2013/12/30 Javascript
Javascript基础知识(二)事件
2014/09/29 Javascript
使用DNode实现php和nodejs之间通信的简单实例
2015/07/06 NodeJs
Javascript仿新浪游戏频道鼠标悬停显示子菜单效果
2015/08/21 Javascript
基于JavaScript代码实现微信扫一扫下载APP
2015/12/30 Javascript
javascript如何实现360度全景照片问题汇总
2016/04/04 Javascript
浅析如何利用JavaScript进行语音识别
2016/10/27 Javascript
使用vue.js实现联动效果的示例代码
2017/01/10 Javascript
使用jQuery操作DOM的方法小结
2017/02/27 Javascript
移动端刮刮乐的实现方式(js+HTML5)
2017/03/23 Javascript
如何使用bootstrap框架 bootstrap入门必看!
2017/04/13 Javascript
详解JS获取HTML DOM元素的8种方法
2017/06/17 Javascript
jquery.validate表单验证插件使用详解
2017/06/21 jQuery
vue-router2.0 组件之间传参及获取动态参数的方法
2017/11/10 Javascript
详解Chart.js轻量级图表库的使用经验
2018/05/22 Javascript
[43:51]2018DOTA2亚洲邀请赛3月30日 小组赛B组 EG VS Secret
2018/03/31 DOTA
python实现代码行数统计示例分享
2014/02/10 Python
Python正则抓取网易新闻的方法示例
2017/04/21 Python
Python在不同目录下导入模块的实现方法
2017/10/27 Python
在django中实现choices字段获取对应字段值
2020/07/12 Python
[原创]赚疯了!转手立赚800+?大佬的python「抢茅台脚本」使用教程
2021/01/12 Python
详解matplotlib绘图样式(style)初探
2021/02/03 Python
金融专业大学生职业生涯规划范文
2014/01/16 职场文书
2014年工程工作总结
2014/11/25 职场文书
Flask搭建一个API服务器的步骤
2021/05/28 Python
Hive常用日期格式转换语法
2022/06/25 数据库