首页 > 编程语言 >【爬虫笔记】Python爬虫简单运用爬取代理IP

【爬虫笔记】Python爬虫简单运用爬取代理IP

时间:2023-09-07 15:38:00浏览次数:52  
标签:Python IP 代理 爬虫 ips proxy ip

一、前言

近些年来,网络上的爬虫越来越多,很多网站都针对爬虫进行了限制,封禁了一些不规则的请求。为了实现正常的网络爬虫任务,爬虫常用代理IP来隐藏自己的真实IP,避免被服务器封禁。本文将介绍如何使用Python爬虫来获取代理IP,以及如何在爬虫中使用代理IP。

二、获取代理IP

获取代理IP有两种方式:免费代理IP网站和收费代理IP服务。免费代理IP网站通常提供一些免费的代理IP,但是这些代理IP质量很不稳定,很容易被封禁或失效;收费代理IP服务则提供稳定、可靠的代理IP,但需要付费购买。由于本文主要介绍如何使用Python爬虫,因此我们将使用免费代理IP网站进行代理IP的获取。

具体来说,我们可以使用爬虫抓取一些免费代理IP网站上的代理IP列表。这里以站大爷免费代理IP为例,具体步骤如下:

  1. 打开站大爷代理网站
  2. 打开开发者工具(F12),进入网络选项卡,点击清空按钮,再点击“获取更多内容”按钮,观察是否有新的请求被发送。
  3. 发现一个名为“nn”的请求,请求的URL为http://www.zdaye.com/nn/1,其中“nn”表示高匿代理IP,而数字“1”表示页码。我们可以通过修改页码来获取不同页的代理IP。
  4. 在请求头中添加“User-Agent”字段,模拟浏览器请求,避免被服务器拒绝。
  5. 抓取响应中的HTML代码,使用正则表达式或BeautifulSoup库从中提取代理IP及其端口号。

下面是具体的Python代码实现:

import requests
from bs4 import BeautifulSoup
import re

# 抓取代理IP列表
def fetch_proxy_ips():
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'}
    url_template = 'http://www.xzdaye.com/nn/{}'
    proxy_ips = []
    for page in range(1, 11):
        url = url_template.format(page)
        resp = requests.get(url, headers=headers)
        soup = BeautifulSoup(resp.text, 'html.parser')
        trs = soup.find_all('tr')
        for tr in trs[1:]:
            tds = tr.find_all('td')
            proxy_ip = tds[1].text + ':' + tds[2].text
            proxy_ips.append(proxy_ip)
    return proxy_ips

# 测试代理IP是否可用
def test_proxy_ip(proxy_ip):
    url = 'http://httpbin.org/ip'
    proxies = {
        'http': 'http://' + proxy_ip,
        'https': 'https://' + proxy_ip
    }
    try:
        resp = requests.get(url, proxies=proxies, timeout=5)
        resp.raise_for_status()
        return True
    except:
        return False

# 获取可用的代理IP
def get_valid_proxy_ips():
    proxy_ips = fetch_proxy_ips()
    valid_proxy_ips = []
    for proxy_ip in proxy_ips:
        if test_proxy_ip(proxy_ip):
            valid_proxy_ips.append(proxy_ip)
    return valid_proxy_ips

print(get_valid_proxy_ips())

在上面的代码中,我们首先使用fetch_proxy_ips()函数抓取西刺代理网站上的前10页高匿代理IP列表,然后使用test_proxy_ip()函数测试每个代理IP是否可用(测试URL为http://httpbin.org/ip),最后使用get_valid_proxy_ips()函数返回可用的代理IP列表。

三、使用代理IP

使用代理IP可以在requests库中指定proxies参数。proxies参数是一个字典类型,其中键名是协议(http或https),键值是代理IP及其端口号。例如,如果我们要使用代理IP地址为“1.2.3.4”,端口号为“5678”的代理服务器,则proxies参数应该为:

proxies = {
    'http': 'http://1.2.3.4:5678',
    'https': 'https://1.2.3.4:5678'
}

下面是一个简单的爬虫示例,使用代理IP爬取JD商品搜索页面:

import requests

# 使用代理IP爬取京东商品搜索页面
def crawl_jd_goods(query, proxy_ip):
    url_template = 'https://search.jd.com/Search?keyword={}&enc=utf-8&page={}'
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'}
    proxies = {
        'http': 'http://' + proxy_ip,
        'https': 'https://' + proxy_ip
    }
    for page in range(1, 6):
        url = url_template.format(query, page)
        resp = requests.get(url, headers=headers, proxies=proxies)
        print(resp.status_code)
        print(resp.text)

# 获取可用的代理IP
proxy_ips = get_valid_proxy_ips()

# 使用第一个可用的代理IP爬取京东商品搜索页面
query = 'Python编程'
proxy_ip = proxy_ips[0]
crawl_jd_goods(query, proxy_ip)

在上面的代码中,我们首先获取可用的代理IP列表,然后使用第一个可用的代理IP爬取京东商品搜索页面(搜索关键字为“Python编程”)。

需要注意的是,代理IP并不是万能的,在一些反爬虫机制非常强大的网站上,即使使用代理IP也很容易被封禁。此外,一些代理IP质量较差,访问速度较慢,甚至会返回错误响应。因此,在实际使用中需要根据具体情况选择可用的代理IP。

标签:Python,IP,代理,爬虫,ips,proxy,ip
From: https://blog.51cto.com/u_16022798/7397606

相关文章

  • python基础 06while循环和for循环
    while循环当你需要重复干一件事情的时候,叫做循环age=17whileTrue:inp_age=int(input('age:'))ifinp_age>age:print('猜大了')elifinp_age<age:print('猜小了')else:print('猜对了')......
  • 软件测试|pip常用命令总结
    当使用Python进行开发时,pip是一个非常有用的包管理工具,它可以帮助我们方便地安装、升级和管理Python包。本文将介绍一些常用的pip命令,以帮助您更好地使用pip。查看帮助文档运行pip--help运行这个命令将帮助我们更好地了解pip的使用,pip命令的参数会完整展示出来,如下:pip--he......
  • Python判断多个文件夹的文件夹名是否包含“分公司”或“营销中心”怎么处理?(方法一)
    大家好,我是皮皮。一、前言前几天在Python最强王者群【哎呦喂 是豆子~】问了一个Python自动化办公的问题,一起来看看吧。大佬们请问下 判断多个文件夹的文件夹名是否包含“分公司”或“营销中心” 有没有什么简便的办法可以实现呀?二、实现过程这里粉丝自己其实已经给了一......
  • 软件测试|Python random模块,超乎想象的强大
    Python的random模块是一个非常强大的工具,用于生成随机数和随机选择。它提供了许多函数和方法,可以满足各种随机化需求。本文将介绍random模块的基本功能和常见用法,以帮助读者更好地理解和利用这个模块。返回整数random.randange()语法如下:random.randrange(stop)random.ran......
  • 趣味微项目:玩转Python编程,轻松学习快乐成长!
    ......
  • IPD集成产品开发进阶:新产品立项CDP流程
    目录前言立项流程专栏目录作者简介前言CDP流程原本是IPD产品开发的前端流程。之所以拿到《产品经理进阶专栏》中来讲解:一是因为这个流程承接了市场管理(也就是MM流程)和产品开发这两个关键业务流。这其实就拉通了从市场(客户)中来,到满足客户需求中去的一个核心闭环。这就从企业流......
  • 如何用python连接Linux服务器
    1.安装paramiko库pipinstallparamiko2.使用paramiko库连接linux#导入库importparamiko#创建一个sshclient对象ssh=paramiko.SSHClient()#允许连接不在know_host中的主机ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())#连接主机ssh.connect(hostname="......
  • Acegi-security-samples-tutorial-1.0.7.zip 实例代码解析
    前面一篇文章,展现了Acegi的作用:现在我将对其中的代码进行讲解:web.xml文件:<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEweb-appPUBLIC'-//SunMicrosystems,Inc.//DTDWebApplication2.3//EN''http://java.sun.com/dtd/web-app_2_3.dtd'......
  • 配置eclipse下的tomcat自动部署
     在eclipse下启动tomcat,可他并不会自动部署到tomcat下的webapps下,老大说这是因为eclipse启动了一个虚拟的tomcat。问题:(1)可有时候发现在虚拟的tomcat下,网页修改了,但运行显示的还是未修改的。(2)在自学axis开发webservice 时,总要到“开始”-“程序”-apachetomcat手动开启tomcat,然......
  • Acegi-security-samples-tutorial-1.0.7.zip 实例学习笔记
    eclipse环境下新建一个webproject项目AcegiTest,把Acegi-security-samples-tutorial-1.0.7.zip中的代码放入项目中的对应目录下:IE地址栏输入:http://localhost/AcegiTest/转到index.jsp 页面: 主页任何人可浏览此页面。安全页面超级安全页面 (1)点“安全页面”则进入登录页......