Python爬虫简单运用爬取 * 的实现

作者:QQ128619 时间:2021-08-25 23:26:42 

功能1: 爬取西拉ip代理官网上的代理ip

环境:python3.8+pycharm
库:requests,lxml
浏览器:谷歌
IP地址:http://www.xiladaili.com/gaoni/

分析网页源码:

Python爬虫简单运用爬取 * 的实现

选中div元素后右键找到Copy再深入子菜单找到Copy Xpath点击一下就复制到XPath

Python爬虫简单运用爬取 * 的实现

我们复制下来的Xpth内容为:/html/body/div/div[3]/div[2]/table/tbody/tr[50]/td[1]
虽然可以查出来ip,但不利于程序自动爬取所有IP,利用谷歌XpathHelp测试一下

Python爬虫简单运用爬取 * 的实现

从上图可以看出,只匹配到了一个Ip,我们稍作修改,即可达到目的
,有关xpath规则,可以参考下表;

Python爬虫简单运用爬取 * 的实现

Python爬虫简单运用爬取 * 的实现

Python爬虫简单运用爬取 * 的实现

经过上面的规则学习后,我们修改为://*[@class=‘mt-0 mb-2 table-responsive']/table/tbody/tr/td[1],再利用xpthhelp工具验证一下:

Python爬虫简单运用爬取 * 的实现

这样我们就可以爬取整个页面的Ip地址了,为了方便爬取更多的IP,我们继续往下翻页,找到翻页按钮:

Python爬虫简单运用爬取 * 的实现

找规律,发现每翻一页,a标签下的href连接地址加1即可,python程序可以利用for循环解决翻页问题即可。
为了提高IP代理的质量,我们爬取评分高的IP来使用。找到评分栏下的Xpath路径,这里不再做详细介绍,思路参考上面找IP地址的思路,及XPath规则,过程参考下图:

Python爬虫简单运用爬取 * 的实现

Python代码实现

代码可复制粘贴直接使用,如果出现报错,修改一下cookie。这里使用代理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()

来源:https://blog.csdn.net/QQ128619/article/details/106915628

标签:Python,爬取, ,
0
投稿

猜你喜欢

  • windows下wxPython开发环境安装与配置方法

    2021-10-22 07:51:01
  • 发一段鼠标掠过表格行颜色改变的代码

    2010-07-02 12:59:00
  • tensorboard实现同时显示训练曲线和测试曲线

    2023-05-18 04:55:34
  • 如何利用JavaScript读取excel文件并绘制echarts图形

    2023-08-27 07:51:16
  • 简单谈谈MySQL数据透视表

    2024-01-25 05:42:07
  • Go语言实现AOI区域视野管理流程详解

    2023-06-20 03:21:51
  • Django drf请求模块源码解析

    2023-06-07 10:03:07
  • tensorflow的ckpt及pb模型持久化方式及转化详解

    2022-12-10 17:32:08
  • 微软建议的ASP性能优化28条守则(8)

    2005-05-30 16:04:00
  • webpack多入口文件页面打包配置详解

    2024-05-25 15:18:07
  • python 装饰器详解与应用范例

    2022-03-18 01:06:55
  • 解决python3.6 右键没有 Edit with IDLE的问题

    2023-07-31 17:15:00
  • 如何在ASP里面创建GUID

    2008-01-08 19:13:00
  • Win7 x64 IIS运行ASP+Access故障完美解决方法(转)

    2012-03-27 18:30:35
  • js 实现拖拽排序详情

    2024-06-07 15:24:23
  • django框架事务处理小结【ORM 事务及raw sql,customize sql 事务处理】

    2022-02-27 23:20:03
  • python绘制多个子图的实例

    2023-01-31 02:24:24
  • Python input()函数案例教程

    2021-12-21 15:45:02
  • Python实现动态给类和对象添加属性和方法操作示例

    2022-05-22 10:58:36
  • 利用XMLBean轻轻松松读写XML

    2008-09-04 11:25:00
  • asp之家 网络编程 m.aspxhome.com