python爬虫[代理]

本文介绍了代理服务器的工作原理及其在突破IP访问限制、提高访问速度等方面的应用。详细讲解了如何使用Python的requests库配置代理访问网页,并提供了一个从特定网站爬取免费代理IP并验证其有效性的脚本示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

说在前面的话

本篇概述:代理原理作用,requests设置代理方法以及爬取免费代理的脚本实例

一、代理原理

在这里插入图片描述

根据自己理解解读:

  1. 客户端设置了代理信息后,客户端向对应的代理站点发出请求(向xxx网站发起请求)
  2. 代理站点收到请求之后,就会执行对应的响应动作(执行动作)
  3. 代理站点获得xxx网站的响应(得到站点响应)
  4. 代理站点根据客户端要求返回对应信息(客户端要求返回Source code,则返回Source code)

二、代理作用

  1. 突破自身ip访问限制,比如访问国外站点
  2. 爬取对ip访问频率有一定限制的站点
  3. 提高访问速度
  4. 隐藏真实ip

三、代理网站

免费代理ip列表

含国外ip方法SEO顾问89代理小幻http代理云代理
不含西刺快代理

付费代理尚未了解,此处留空

四、requests设置代理方法

requests中有预设好的参数接收代理信息 proxies,这个参数接收的是一个字典对象

因为不知道访问的网站使用的是http协议还是https协议,所以proxies最好2种都有设置

proxies = {
    'http':92.255.255.78:54628,
    'https':92.255.255.78:54628
}
resp = requests.get(url=url1,headers=headers,proxies=proxies)

五、脚本示例

github地址:https://github.com/Coder-Sakura/exp/tree/master/seo_ip

本来我是打算用89代理的api接口,但是测试之后发现可靠性有点低,并且外网ip比较少,所以转用SEO

(本次抓取代理ip主要是用在我自己做 pixiv 的小项目上,爬取关注画师的所有作品和自己的收藏作品,后续会整理出来,初学爬虫,有错还请指正)

import requests
import random
import time
from lxml import etree
from bs4 import BeautifulSoup
from requests.packages.urllib3.exceptions import InsecureRequestWarning     # 用于强制取消警告
from requests.adapters import HTTPAdapter                                   # 用于强制取消警告

requests.packages.urllib3.disable_warnings(InsecureRequestWarning)      # 强制取消警告

class seo_ip():

    def __init__(self):
        self.headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) '
                          'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'}
        self.agent_ip_list = []
    
    def Agent(self,ip_agent_url):
        html = requests.get(url=ip_agent_url,headers=self.headers,verify=False,timeout=5)
        html_soup = BeautifulSoup(html.text, 'lxml')
        # 去除第一个和前25个,26-50为国外ip
        ip_list = html_soup.find('tbody').find_all('tr')[26:]    
        items = []
        print('搜索完成,代理信息如下:') 
        for item in ip_list:        
            ip_port = list(item)[0].get_text() + ':' +list(item)[1].get_text()
            # list(ip_port)[0]为ip,[1]为端口,[2]响应时间,[3]位置,[4]最后验证时间
            print('ip: %s ,响应时间: %ss ,ip位置: %s' % (ip_port,list(item)[2].get_text(),list(item)[3].get_text()))
            items.append(ip_port)        #存储爬取到的ip(需要添加)
        return items

    def judge(self,items):       # 检验ip活性     # https://ip.seofangfa.com/
        print('正在进行代理池ip活性检测......')
        for item in items:
            try:
                proxy = {
                    'http':item,
                    'https':item
                    }
                # 遍历时,利用百度,设定timeout,未响应则断开连接
                judge_url = 'https://www.baidu.com/'     
                response = requests.get(url=judge_url,headers=self.headers,proxies=proxy,verify=False,timeout=5)
                self.agent_ip_list.append(item)
                print(item,'可用...')
            except:
                print(item,'不可用...')
        print('代理池ip活性检测完毕...\n代理池总量:',len(self.agent_ip_list),'\n代理池:',self.agent_ip_list)

    def work(self):
        ip_agent_url = 'https://ip.seofangfa.com/'
        items = self.Agent(ip_agent_url)
        self.judge(items)

seo_ip = seo_ip()
seo_ip.work()

没有导入这2个库的话,会因为ssl证书而出现警告,如图:

  1. from requests.packages.urllib3.exceptions import InsecureRequestWarning
  2. from requests.adapters import HTTPAdapter

在这里插入图片描述

六、附图

最后附上运行图

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值