您现在的位置是:首页 >学无止境 >【python案例】获取IP代理数据,筛选出符合需求的IP网站首页学无止境

【python案例】获取IP代理数据,筛选出符合需求的IP

茜茜是帅哥 2024-06-22 18:01:03
简介【python案例】获取IP代理数据,筛选出符合需求的IP

前言

嗨喽,大家好呀~这里是爱看美女的茜茜呐

我们为什么要IP代理呢?

当采集数据, 批量采集数据, 请求速度过快, 网站可能会把你IP封掉 <你的网络进不去这个网站>

IP代理换一个IP, 再去采集请求数据

开发环境:

  • 解释器版本: python 3.8

  • 代码编辑器: pycharm 2021.2

第三方模块使用:

  • import requests —> 数据请求模块<工具>

  • import parsel —> 解析数据模块

第三方模块安装:

  1. win + R 输入 cmd 点击确定, 输入安装命令 pip install 模块名 (pip install requests) 回车

  2. 在pycharm中点击Terminal(终端) 输入安装命令

可能安装失败原因:出现大量报红 (read time out)

解决方法: 因为是网络链接超时, 需要切换镜像源

可使用镜像源例举:

  1. 清华:https://pypi.tuna.tsinghua.edu.cn/simple

  2. 中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/

  3. 华中理工大学:https://pypi.hustunique.com/

  4. 山东理工大学:https://pypi.sdutlinux.org/

例如:pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple/ 模块名


? ? ? 更多精彩机密、教程,尽在下方,赶紧点击了解吧~

素材、视频、完整代码、插件安装教程我都准备好了,直接在文末名片自取就可


思路分析

一. 抓包分析数据来源

  1. 明确需求:

    • 确定采集网站以及采集数据是什么

      获取IP代理, 检测IP代理是否可用

       dit = {
           'http': 'http://' + IP:端口
       }
      
  2. 分析IP和端口号 这两个数据, 请求那个网站可以得到?

    抓包分析数据所在url地址 --> 开发者工具进行抓包分析

    • F12 或者 右键点击检查选择network 刷新网页

      为了让网页数据内容重新加载一遍

    • 分析数据在哪里 --> 通过关键字<我们想要数据>搜索数据来源

二. 代码实现步骤过程

  1. 发送请求, 模拟浏览器对于url地址发送请求

  2. 获取数据, 获取服务器返回响应数据

    开发者工具 --> response

  3. 解析数据, 提取我们想要数据内容

    IP 端口

  4. 保存数据, 把可用IP代理保存本地

    IP代理检测, 检测可用之后, 保存IP代理

代码展示

import requests
# 导入re正则 内置模块 不需要安装
import re
import parsel

use_list = []
all_list = []
for page in range(1, 11):
    # 请求链接
    url = f'https://****/free/inha/{page}/'
    # 模拟伪装 --> headers 请求头  字典数据类型
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
    }
    # 发送请求
    response = requests.get(url=url, headers=headers)
    # re正则提取数据
    IP_list = re.findall('<td data-title="IP">(.*?)</td>', response.text)
    PORT_list = re.findall('<td data-title="PORT">(.*?)</td>', response.text)
    for IP, PORT in zip(IP_list, PORT_list):
        dit = {
            'http': 'http://' + IP + ':' + PORT,
            'https': 'https://' + IP + ':' + PORT,
        }
        all_list.append(dit)
        try:
            response_1 = requests.get(url='https://www.baidu.com/', headers=headers, proxies=dit, timeout=1)
            if response_1.status_code == 200:
                print(dit, '这个代理真润')
                use_list.append(dit)
        except:
            print(dit, 'He tui~ 用不了')


print('==========' * 50)
print(f'一共采集到{len(all_list)}个IP代理')
print(all_list)
print(f'可以使用的IP代理有{len(use_list)}个')
print(use_list)
with open('代理https.txt', mode='w', encoding='utf-8') as f:
    f.write('
'.join([str(i) for i in use_list]))

括展小知识

解析方法:

1、re: 直接对于字符串数据提取

  • re.findall(‘匹配什么数据’, ‘什么地方匹配’) 找到我们想要数据内容

    从什么地方去匹配什么数据

    从 response.text 里面去匹配 (.?) 其中 (.?) 这段内容就是我们要的数据

  • () 表示你要的数据, .*? 匹配规则 可以匹配任意字符(除了换行符 )

2、css: 根据标签属性提取数据

  • list tbody tr td:nth-child(1) 定位标签元素

  • td:nth-child(1) 表示第一个td标签

  • td:nth-child(1)::text 表示提取第一个td标签里面文本数据

  • getall() 表示获取所有

css提取数据

    IP_list = selector.css('#list tbody tr td:nth-child(1)::text').getall()
    PORT_list = selector.css('#list tbody tr td:nth-child(2)::text').getall()
    print('===' * 50)
    print(IP_list)
    print(PORT_list)

css / xpath 转换数据类型

    selector = parsel.Selector(response.text)

3、 xpath: 根据标签节点提取数据

xpath提取数据

    IP_list = selector.xpath('//*[@id="list"]//tbody/tr/td[1]/text()').getall()
    PORT_list = selector.xpath('//*[@id="list"]//tbody/tr/td[2]/text()').getall()
    print('===' * 50)
    print(IP_list)
    print(PORT_list)

尾语

感谢你观看我的文章呐~本次航班到这里就结束啦 ?

希望本篇文章有对你带来帮助 ?,有学习到一点知识~

躲起来的星星?也在努力发光,你也要努力加油(让我们一起努力叭)。

最后,宣传一下呀~???更多源码、资料、素材、解答、交流皆点击下方名片获取呀??

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。