Python爬虫实战:如何避免被禁止请求

简介: 爬虫是一种自动从互联网上获取数据的程序,它可以用于各种目的,例如搜索引擎、数据分析、网络安全等。然而,爬虫也可能遇到一些困难和挑战,例如被目标网站禁止请求。禁止请求是指网站通过一些技术手段,阻止或限制爬虫访问其内容,例如返回403 Forbidden或503 Service Unavailable等状态码,或者重定向到其他页面,或者要求输入验证码等。禁止请求的情况会影响爬虫的正常运行和数据获取,因此,我们需要了解如何应对和解除禁止请求的情况。

亿牛云代理.jpg

爬虫是一种自动从互联网上获取数据的程序,它可以用于各种目的,例如搜索引擎、数据分析、网络安全等。然而,爬虫也可能遇到一些困难和挑战,例如被目标网站禁止请求。禁止请求是指网站通过一些技术手段,阻止或限制爬虫访问其内容,例如返回403 Forbidden或503 Service Unavailable等状态码,或者重定向到其他页面,或者要求输入验证码等。禁止请求的情况会影响爬虫的正常运行和数据获取,因此,我们需要了解如何应对和解除禁止请求的情况。

禁止请求的特点

禁止请求的特点主要有以下几个方面:

  • 动态性:禁止请求的策略和方式可能随着时间和情况而变化,例如网站可能根据访问频率、时间间隔、来源地址、用户代理等因素来判断是否禁止请求。
  • 多样性:禁止请求的形式和程度可能不同,例如网站可能只是返回一个错误页面,或者要求输入验证码,或者直接拒绝连接等。
  • 隐蔽性:禁止请求的原因和逻辑可能不明显,例如网站可能没有明确地告知用户为什么被禁止请求,或者使用一些隐晦的方式来表示禁止请求,例如返回一个空白页面或一个无关的页面等。

应对和解除禁止请求的方法

应对和解除禁止请求的方法主要有以下几个方面:

  • 遵守规范:爬虫应该遵守网站的robots.txt协议,尊重网站的版权和隐私,避免对网站造成过大的负担和影响。爬虫应该尽量模仿正常用户的行为,例如设置合理的访问频率和时间间隔,使用不同的用户代理和来源地址等。
  • 使用代理:爬虫可以使用代理服务器来隐藏自己的真实IP地址,从而避免被网站识别和封锁。代理服务器可以是公开的或者私有的,可以是静态的或者动态的,可以是单个的或者多个的。爬虫应该选择合适的代理服务器,并定期更换代理服务器。
  • 处理异常:爬虫应该能够处理各种异常情况,例如网络错误、超时错误、状态码错误等,并采取相应的措施,例如重试、跳过、记录等。爬虫应该能够识别并处理各种禁止请求的形式,例如错误页面、验证码页面、重定向页面等,并采取相应的措施,例如解析、输入、跟踪等。

应对和解除禁止请求的案例

下面我们来看一个简单的应对和解除禁止请求的案例,即利用Python标准库中的模块实现一个简单的百度搜索结果爬取功能,并使用代理服务器来避免被禁止请求。我们需要完成以下几个步骤:

  • 导入所需的模块
  • 构造请求头和代理信息
  • 发送请求并获取响应
  • 判断响应状态码是否为200
  • 解析响应并提取数据
  • 存储数据

应对和解除禁止请求的代码实现

下面是根据上述案例实现的代码:

# 导入所需的模块
import requests
from bs4 import BeautifulSoup
import re

# 构造请求头和代理信息
headers = {
   
   
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36"
}
# 爬虫代理
# 亿牛云 代理服务器
proxyHost = "www.16yun.cn"
proxyPort = "3111"
# 代理验证信息
proxyUser = "16YUN"
proxyPass = "16IP"
# 构造代理字典
proxies = {
   
   
    "http": f"http://{proxyUser}:{proxyPass}@{proxyHost}:{proxyPort}",
    "https": f"https://{proxyUser}:{proxyPass}@{proxyHost}:{proxyPort}"
}

# 发送请求并获取响应
# 定义搜索关键词
keyword = "Python"
# 定义搜索结果页数
page_num = 3
# 定义搜索结果列表
results = []
# 循环遍历每一页
for i in range(page_num):
    # 构造请求URL
    url = f"https://www.baidu.com/s?wd={keyword}&pn={i*10}"
    # 发送请求并获取响应
    response = requests.get(url, headers=headers, proxies=proxies)
    # 判断响应状态码是否为200
    if response.status_code == 200:
        # 解析响应并提取数据
        # 创建BeautifulSoup对象
        soup = BeautifulSoup(response.text, "lxml")
        # 找到所有的搜索结果div标签
        divs = soup.find_all("div", class_="result c-container new-pmd")
        # 循环遍历每个div标签
        for div in divs:
            # 提取标题
            title = div.find("h3").get_text()
            # 提取链接
            link = div.find("a").get("href")
            # 提取摘要
            summary = div.find("div", class_="c-abstract").get_text()
            # 去除摘要中的日期和来源信息
            summary = re.sub(r"\d{4}-\d{2}-\d{2}\s\S+\s", "", summary)
            # 将标题、链接和摘要组成一个字典
            result = {
   
   
                "title": title,
                "link": link,
                "summary": summary
            }
            # 将字典添加到搜索结果列表中
            results.append(result)

# 存储数据
# 打印搜索结果列表的长度和内容
print(f"共爬取了{len(results)}条搜索结果,内容如下:")
for result in results:
    print(result)

应对和解除禁止请求的结语

通过上述案例,我们可以看到,应对和解除禁止请求的情况是非常重要而必要的。当然,这只是一个基础的方法,如果我们想要实现更复杂和高级的方法,我们还需要学习更多的知识和技术,例如反反爬虫、动态网页、数据清洗、数据分析等。

相关文章
|
2月前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
14天前
|
测试技术 数据库 Python
Python装饰器实战:打造高效性能计时工具
在数据分析中,处理大规模数据时,分析代码性能至关重要。本文介绍如何使用Python装饰器实现性能计时工具,在不改变现有代码的基础上,方便快速地测试函数执行时间。该方法具有侵入性小、复用性强、灵活度高等优点,有助于快速发现性能瓶颈并优化代码。通过设置循环次数参数,可以更准确地评估函数的平均执行时间,提升开发效率。
89 61
Python装饰器实战:打造高效性能计时工具
|
11天前
|
运维 Shell 数据库
Python执行Shell命令并获取结果:深入解析与实战
通过以上内容,开发者可以在实际项目中灵活应用Python执行Shell命令,实现各种自动化任务,提高开发和运维效率。
43 20
|
12天前
|
数据采集 JSON 数据格式
Python爬虫:京东商品评论内容
京东商品评论接口为商家和消费者提供了重要工具。商家可分析评论优化产品,消费者则依赖评论做出购买决策。该接口通过HTTP请求获取评论内容、时间、点赞数等数据,支持分页和筛选好评、中评、差评。Python示例代码展示了如何调用接口并处理返回的JSON数据。应用场景包括产品优化、消费者决策辅助、市场竞争分析及舆情监测。
|
24天前
|
数据采集 供应链 API
Python爬虫与1688图片搜索API接口:深度解析与显著收益
在电子商务领域,数据是驱动业务决策的核心。阿里巴巴旗下的1688平台作为全球领先的B2B市场,提供了丰富的API接口,特别是图片搜索API(`item_search_img`),允许开发者通过上传图片搜索相似商品。本文介绍如何结合Python爬虫技术高效利用该接口,提升搜索效率和用户体验,助力企业实现自动化商品搜索、库存管理优化、竞品监控与定价策略调整等,显著提高运营效率和市场竞争力。
63 3
|
2月前
|
存储 应用服务中间件 开发工具
对象存储OSS-Python设置代理访问请求
通过 Python SDK 配置 nginx 代理地址请求阿里云 OSS 存储桶服务。示例代码展示了如何使用 RAM 账号进行身份验证,并通过代理下载指定对象到本地文件。
99 15
|
2月前
|
数据采集 存储 缓存
如何使用缓存技术提升Python爬虫效率
如何使用缓存技术提升Python爬虫效率
|
2月前
|
数据采集 Web App开发 监控
Python爬虫:爱奇艺榜单数据的实时监控
Python爬虫:爱奇艺榜单数据的实时监控
|
2月前
|
数据采集 JSON API
如何利用Python爬虫淘宝商品详情高级版(item_get_pro)API接口及返回值解析说明
本文介绍了如何利用Python爬虫技术调用淘宝商品详情高级版API接口(item_get_pro),获取商品的详细信息,包括标题、价格、销量等。文章涵盖了环境准备、API权限申请、请求构建和返回值解析等内容,强调了数据获取的合规性和安全性。
|
2月前
|
数据采集 存储 API
利用Python爬虫获取1688关键词接口全攻略
本文介绍如何使用Python爬虫技术合法合规地获取1688关键词接口数据,包括环境准备、注册1688开发者账号、获取Access Token、构建请求URL、发送API请求、解析HTML及数据处理存储等步骤,强调遵守法律法规和合理使用爬虫技术的重要性。

热门文章

最新文章