python网络爬虫学习——编写一个网络爬虫

news2024/11/25 10:30:38

参考资料:用Python写网络爬虫(第2版)

1、编写一个函数

        (1)用于下载网页,且当下载网页发生错误时能及时报错。

# 导入库
import urllib.request
from urllib.error import URLError,HTTPError,ContentTooShortError

def download(url):
    print("downloading: ",url)
    try:
        html=urllib.request.urlopen(url).read()
    except (URLError,HTTPError,ContentTooShortError) as e:
        print("Download error: ",e.reason)
        html=None
    return html

# 函数测试
url="http://www.baidu.com"
download(url)

        (2)增加重试下载功能,当服务器端发生问题时,能自动重试下载。(4xx 错误发生在请求存在问题时,而 5xx 错误则发生在服务端存在问题时)

# 导入库
import urllib.request
from urllib.error import URLError,HTTPError,ContentTooShortError

def download(url,num_retries=2):
    print("downloading: ",url)
    try:
        html=urllib.request.urlopen(url).read()
    except (URLError,HTTPError,ContentTooShortError) as e:
        print("download error: ",e.reason)
        html=None
        if num_retries>0:
            if hasattr(e,"code") and 500<=e.code<600:
                #当download函数遇到5xx错误码时,将会递归调用函数自身进行重试
                return download(url,num_retries-1)
    return html

# 函数测试
download("http://httpstat.us/500")

        (3)设置用户代理。设定一个默认的用户代理“wswp”(即web scraping with python首字母缩写)。

# 导入库
import urllib.request
from urllib.error import URLError,HTTPError,ContentTooShortError

def download(url,user_agent="wswp",num_retries=2):
    print("downloading: ",url)
    request=urllib.request.Request(url)
    request.add_header("User-agent",user_agent)
    try:
        html=urllib.request.urlopen(request).read()
    except (URLError,HTTPError,ContentTooShortError) as e:
        print("download error: ",e.reason)
        html=None
        if num_retries>0:
            if hasattr(e,"code") and 500<=e.code<600:
                return download(url,num_retries-1)
    return html
# 函数测试
url="http://www.baidu.com"
download(url)

2、利用id遍历爬虫

import itertools
def crawl_site(url):
    for page in itertools.count(1):
        pg_url="{}-{}".format(url,page)
        html=download(pg_url)    # download函数是上一案例中编写好的函数
        if html is None:
            break
            
# 测试
url="http://example.python-scraping.com/view/"
crawl_site(url)

        上面的代码存在一个缺陷,就是必须确保网页地址中的id是连续的,假如某些记录已被删除,数据库id之间并不是连续的,其只要访问到某个间隔点,爬虫就会立即退出。下面对代码进行改进:当连续发生多次下载错误后才会退出程序。

def crawl_site(url,max_errors=5):
    for page in itertools.count(1):
        pg_url="{}{}".format(url,page)
        html=download(pg_url)
        if html is None:
            num_errors+=1
            if num_errors==max_errors:
                # 当连续html连续出现max_errors次None时,则停止循环
                break
            else:
                # 若成功抓取,则num_errors归零,用于下次重新技术
                num_errors=0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1651376.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Shell编程规范和变量

一.Shell脚本概述 Shell脚本的概念 将要执行的命令按顺序保存到一个文本文件给该文件可执行权限可结合各种Shell控制语句以完成更复杂的操作 Shell脚本应用场景 重复性操作交互性任务批量事务处理服务运行状态监控定时任务执行 Shell的作用 1&#xff09;介于系统内核与用…

《Fundamentals of Power Electronics》——隔离型CUK转换器、

以下是隔离型CUK转换器的相关知识点&#xff1a; Cuk电路的隔离型版本获得方式不同。基础非隔离型Cuk电路如下图所示。 将上图中电容C1分成两个串联的电容C1a和C1b&#xff0c;得到结果如下图所示。 在两个电容之间插入一个变压器&#xff0c;得到如下图所示电路。 变压器极性…

网络基础-默认网关

默认网关&#xff0c;又称缺省网关&#xff0c;缺省路由器&#xff1b;它是指在一个连接两个不同网络的设备&#xff0c;为网关设备&#xff1b;当主机需要发送数据包到另一个子网或者另一个网络时&#xff0c;它会首先检查目标地址是否在本地子网内&#xff1b;如果不在本地子…

Flask gevent启动报错UnicodeDecodeError

文章目录 环境代码报错Track解决思路 环境 acondana 24.1.2python 3.7.13 32bitflask 2.2.3gevent 21.8.0 代码 port 7236 logging.basicConfig(levellogging.INFO, # 控制台打印的日志级别filename./logs/app.log, # 将日志写入log_new.log文件中filemodea, # 模式&…

nodejs里面的 http 模块介绍和使用

Node.js的HTTP模块是一个核心模块&#xff0c;它提供了很多功能来创建HTTP服务器和发送HTTP请求。 http.Server是一个基于事件的http服务器&#xff0c;内部是由c实现的&#xff0c;接口是由JavaScript封装。 http.request是一个http客户端工具。 用户向服务器发送数据。 创…

Cordova 12 Android 不支持 http 原因探索

最近在升级 Cordova 到最新版本&#xff0c;升级完成后发现无法请求网络&#xff0c;研究了两次最终发现解决方案。 发现控制台中有日志输出&#xff0c;提示当前是 https &#xff0c;无法直接访问 http。 [INFO:CONSOLE(225)] "Mixed Content: The page at https://lo…

怎么设置电脑开机后自动启动某个程序 ?(电脑如何设置自动运行?)

​在现今的信息化社会&#xff0c;电脑已经成为我们生活和工作中不可或缺的一部分。而一些特定的程序&#xff0c;如杀毒软件、系统优化工具等&#xff0c;我们可能希望它们在每次开机后都能自动启动&#xff0c;以便更好地保护和管理我们的电脑。那么&#xff0c;如何设置电脑…

白色或类白色的粉末/固体,DOTA-Ala-Ala-Tyr-COOH,是一种具有特定氨基酸序列的多肽,具有良好的稳定性和溶解性

一、试剂信息 英文名&#xff1a;DOTA-Ala-Ala-Tyr-COOH&#xff0c;DOTA-AAY-OHCAS号&#xff1a;N/A分子式&#xff1a;C31H47N7O12分子量&#xff1a;709.74结构式&#xff1a; 纯度标准&#xff1a;≥95%包装规格&#xff1a;1g&#xff0c;5g&#xff0c;10g&#xff08…

什么是HTTP/2?

HTTP/2&#xff08;原名HTTP 2.0&#xff09;即超文本传输协议第二版&#xff0c;使用于万维网。HTTP/2主要基于SPDY协议&#xff0c;通过对HTTP头字段进行数据压缩、对数据传输采用多路复用和增加服务端推送等举措&#xff0c;来减少网络延迟&#xff0c;提高客户端的页面加载…

探索希尔排序算法:优雅而高效的增量排序

在计算机科学领域&#xff0c;排序算法是一项至关重要的技术&#xff0c;在各种应用场景中都扮演着重要角色。而希尔排序算法作为一种增量排序方法&#xff0c;在实际应用中展现了其优雅而高效的特性。本文将深入探讨希尔排序算法的原理、实现细节以及优化方法&#xff0c;带您…

free5gc+ueransim操作

启动free5gc容器 cd ~/free5gc-compose docker-compose up -d 记录虚拟网卡地址&#xff0c;eth0 ifconfig 查看并记录amf网元的ip地址 sudo docker inspect amf "IPAddress"那一行&#xff0c;后面记录的即是amf的ip地址 记录上述两个ip地址&#xff0c;完成UER…

C#高级编程笔记-泛型

本章的主要内容如下&#xff1a; ● 泛型概述 ● 创建泛型类 ● 泛型类的特性 ● 泛型接口 ● 泛型结构 ● 泛型方法 目录 1.1 泛型概述 1.1.1 性能 1.1.2 类型安全 1.1.3 二进制代码的重用 1.1.4 代码的扩展 1.1.5 命名…

2024高校网络安全管理运维赛wp

文章目录 misc签到钓鱼邮件识别easyshellSecretDBGatewayzipApachef for r webphpsqlMessy Mongo misc 签到 钓鱼邮件识别 两部分解base64&#xff0c;各一个flag 后面没有什么地方有有用信息了&#xff0c;根据题目钓鱼邮件&#xff0c;可能第三段flag就跟DMARC、DKIM 和 SP…

LED显示屏的维护与使用指南

LED显示屏作为一种先进的显示技术&#xff0c;广泛应用于广告、信息显示、舞台背景等领域。然而&#xff0c;为了确保显示屏的长期稳定运行和良好的显示效果&#xff0c;对其进行正确的维护和使用是非常必要的。以下是一些专业的维护与使用建议&#xff1a; 维护建议&#xff1…

个人IP打造孵化运营产业链商业计划书

【干货资料持续更新&#xff0c;以防走丢】 个人IP打造孵化运营产业链商业计划书 部分资料预览 资料部分是网络整理&#xff0c;仅供学习参考。 PPT共90页&#xff08;完整资料包含以下内容&#xff09; 目录 个人IP运营方案&#xff1a; 1. 个人IP定位与构建 1.1 人格画像构…

Chromium编译指南2024 Windows11篇-Git工具准备(四)

前言 在《Chromium编译指南2024&#xff08;三&#xff09;》中&#xff0c;我们已经完成了对 Chromium 编译环境的其他相关环境变量的设置&#xff0c; 接下来&#xff0c;我们将进一步探讨如何初始化配置 Git&#xff0c;为获取 Chromium 源代码做好准备。 1. 配置Git 用户…

计算有效声压

计算有效声压 clear all; %%----------------------------------------------读取文件------------------------------------------ % 从wav文件读入语音数据&#xff0c;该语音采样率16k&#xff0c;故信号最高频率8k。 [x,fs]audioread(C2_3_y.wav); % 取x的一个通道 xx(:,1)…

校园论坛系统基于PHP的校园管理系统毕设校园好感度系统 校园文化建设系统APP小程序H5前后端源码交付支持二开,一次付款,终生使用

APP小程序H5前后端源码交付&#xff0c;支持二开&#xff0c;一次付款&#xff0c;终身使用&#xff0c;免费更新系统本身源码。 校园社交网络系统开发是一个复杂且综合性的项目&#xff0c;旨在为学生、教师和管理人员提供一个互动、分享和交流的平台。以下是一个关于校园社交…

Windows Server 2012R2定时计划任务设置

1.打开Windows定时计划任务 2.点击右侧“创建任务” 3.在弹出的“创建任务”对话框中,输入任务名称,设定运行任务时,使用的用户账户等信息;点击“触发器”选项 4.在“触发器”选项中,点击“新建”按钮,设置触发条件;根据实际情况,设置“开始任务”、设置“起止”时间…

记一次favicon.ico的折腾

某项目需要将前端和后台整合在一起 我也不知道为啥要整合 上面有要求就整呗 正常前端npm run build打包后 dist内会根据设置自动生成favicon.ico文件在根目录下 但由于前后端整合 需要打包后将图标放在dist下的static文件夹里 需要的效果 打包后 index.html里 <link rel&…