一、前言

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

二、获取代理IP

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

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

1. 打开站大爷代理网站(https://www.zdaye.com/),选择代理IP类型和位置,点击搜索按钮。

2. 打开开发者工具(F12),进入网络选项卡,点击清空按钮,再点击“获取更多内容”按钮,观察是否有新的请求被发送。

3. 发现一个名为“nn”的请求,请求的URL为http://www.zdaye.com/nn/1,其中“nn”表示高匿代理IP,而数字“1”表示页码。我们可以通过修改页码来获取不同页的代理IP。

4. 在请求头中添加“User-Agent”字段,模拟浏览器请求,避免被服务器拒绝。

5. 抓取响应中的HTML代码,使用正则表达式或BeautifulSoup库从中提取代理IP及其端口号。

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

```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参数应该为:

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

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

```python
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的更多相关文章

  1. python爬虫爬取代理IP

    # #author:wuhao # #--*------------*-- #-****#爬取代理IP并保存到Excel----#爬取当日的代理IP并保存到Excel,目标网站xicidaili.co ...

  2. PYTHON 爬虫笔记八:利用Requests+正则表达式爬取猫眼电影top100(实战项目一)

    利用Requests+正则表达式爬取猫眼电影top100 目标站点分析 流程框架 爬虫实战 使用requests库获取top100首页: import requests def get_one_pag ...

  3. scrapy爬虫笔记(三)------写入源文件的爬取

    开始爬取网页:(2)写入源文件的爬取 为了使代码易于修改,更清晰高效的爬取网页,我们将代码写入源文件进行爬取. 主要分为以下几个步骤: 一.使用scrapy创建爬虫框架: 二.修改并编写源代码,确定我 ...

  4. [爬虫]用python的requests模块爬取糗事百科段子

    虽然Python的标准库中 urllib2 模块已经包含了平常我们使用的大多数功能,但是它的 API 使用起来让人感觉不太好,而 Requests 自称 “HTTP for Humans”,说明使用更 ...

  5. 【Python】简单实现爬取小说《天龙八部》,并在页面本地访问

    背景 很多人说学习爬虫是提升自己的一个非常好的方法,所以有了第一次使用爬虫,水平有限,依葫芦画瓢,主要作为学习的记录. 思路 使用python的requests模块获取页面信息 通过re模块(正则表达 ...

  6. Python超简单的爬取网站中图片

    1.首先导入相关库 import requests import bs4 import threading #用于多线程爬虫,爬取速度快,可以完成多页爬取 import os 2.使用bs4获取htm ...

  7. 爬虫爬取代理IP池及代理IP的验证

    最近项目内容需要引入代理IP去爬取内容. 为了项目持续运行,需要不断构造.维护.验证代理IP. 为了绕过服务端对IP 和 频率的限制,为了阻止服务端获取真正的主机IP. 一.服务器如何获取客户端IP ...

  8. python代理池的构建3——爬取代理ip

    上篇博客地址:python代理池的构建2--代理ip是否可用的处理和检查 一.基础爬虫模块(Base_spider.py) #-*-coding:utf-8-*- ''' 目标: 实现可以指定不同UR ...

  9. 使用Python爬取代理ip

    本文主要代码用于有代理网站http://www.kuaidaili.com/free/intr中的代理ip爬取,爬虫使用过程中需要输入含有代理ip的网页链接. 测试ip是否可以用 import tel ...

  10. python 批量爬取代理ip

    import urllib.request import re import time import random def getResponse(url): req = urllib.request ...

随机推荐

  1. k8s实战案例之部署redis单机和redis cluster

    1.在k8s上部署redis单机 1.1.redis简介 redis是一款基于BSD协议,开源的非关系型数据库(nosql数据库),作者是意大利开发者Salvatore Sanfilippo在2009 ...

  2. WPF实现新手引导

    1. 半透明灰的遮罩层 新建一个遮盖的window窗体 canvas是后期可以在思显示高亮区域 //定义一个window将它的样式设置透明等可以覆盖到其他窗体上,其中遮罩层使用border控件 //原 ...

  3. 基于OLAP技术的企业级大数据分析平台的国际化发展与合作

    目录 标题:<基于OLAP技术的企业级大数据分析平台的国际化发展与合作> 背景介绍 随着全球化的不断推进,企业对大数据分析的需求日益增长.企业通过数据分析来发现隐藏在业务数据中的机会,从而 ...

  4. 多个commit合并为一个

    在进行多个commit合并成一个博客编写的过程中,你可以使用以下代码示例作为参考: # 合并多个commit git rebase -i HEAD~N # N代表需要合并的commit数目,例如合并最 ...

  5. Django自身提供测试类、工具-调研

    Django自身提供测试类.工具 django.test.Client 他的作用是模拟客户端.提供一系列的方法,例如get.post.delete.login等其中login是用django自身的验证 ...

  6. Unity UGUI的Text(文本)组件的介绍及使用

    UGUI的Text(文本)组件的介绍及使用 什么是UGUI的Text(文本)组件? UGUI(Unity Graphic User Interface)是Unity引擎的一套用户界面系统,而Text( ...

  7. Flutter ListView 不满屏 无法滚动

    场景: flutter ListView 在做上拉加载的时候,未list添加controller后,数据不满屏,无法滚动 解决: 未listview 设置: physics: const Always ...

  8. Day03_Java_作业

    A:选择题 1.给出以下代码,请问表达式grade==70在以下两条语句中是否获得执行? boolean flag = false && grade == 70;//第一条语句 boo ...

  9. 【技术积累】Vue中的核心概念【四】

    Vue的生命周期 Vue中的生命周期是指组件从创建到销毁的整个过程中,会触发一系列的钩子函数 Vue2中的生命周期 Vue2中的生命周期钩子函数是在组件的不同阶段执行的特定函数.这些钩子函数允许开发者 ...

  10. SPI总线学习笔记

    SPI是串行外设接口(Serial Peripheral Interface)的缩写,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空 ...