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

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

1、编写一个函数

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

# 导入库
import urllib.request
from urllib.error import URLError,HTTPError,ContentTooShortErrordef download(url):print("downloading: ",url)try:html=urllib.request.urlopen(url).read()except (URLError,HTTPError,ContentTooShortError) as e:print("Download error: ",e.reason)html=Nonereturn html# 函数测试
url="http://www.baidu.com"
download(url)

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

# 导入库
import urllib.request
from urllib.error import URLError,HTTPError,ContentTooShortErrordef 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=Noneif 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,ContentTooShortErrordef 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=Noneif 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+=1if num_errors==max_errors:# 当连续html连续出现max_errors次None时,则停止循环breakelse:# 若成功抓取,则num_errors归零,用于下次重新技术num_errors=0

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32F103学习笔记 | 7.使用寄存器点亮LED灯

int main(void) { // 分析指南者硬件原理图得知要实现点亮灯泡需要将PB0设置为低电位&#xff0c; // 查阅STM32F10x中文手册的端口配置低寄存器&#xff0c;得知一个PB有8个配置位&#xff0c;查阅手册找到了PB0的位置是3:2位置&#xff0c; // 插入未知知识&#xff1a;将端…

Hadoop3:HDFS的架构组成

一、官方文档 我这里学习的是Hadoop3.1.3版本&#xff0c;所以&#xff0c;查看的也是3.1.3版本的文档 Architecture模块最下面 二、HDFS架构介绍 HDFS架构的主要组成部分&#xff0c;是一下四个部分 1、NameNode(NN) 就是Master节点&#xff0c;它是集群管理者。 1、管…

如何用virtualbox 来跑openwrt 镜像?

1.下载好openwrt源代吗&#xff0c;编译之前先配置&#xff0c;让编译产生x86的virtualbox 镜像&#xff1a; 编译完成之后会产生vdi镜像文件&#xff0c; 在virtualbox 中创建一虚拟机&#xff0c;类型选择linux,版本other linux 64: 内存选择512&#xff1a; 这个地方把镜像…

微信小程序03: 获取不限制的小程序二维码

全文目录,一步到位 1.前言简介1.1 专栏传送门1.1.1 上文小总结1.1.2 上文传送门 2. 获取不限制二维码操作2.1 准备工作2.1.1 请先复制00篇的统一封装代码2.1.2 修改配置文件中的参数 2.2 具体代码使用与注释如下2.2.1 业务代码如下2.2.2 代码解释(一)[无需复制]2.2.3 创建Base6…

初识C语言——第十四天

指针 总结&#xff1a;指针变量是用来干啥的呢&#xff0c;一是用来存放别人的地址的&#xff0c;指针是有类型的&#xff0c;这个类型是如何写的&#xff1b;二是当我有一天通过*(解引用符&#xff09;找到我所要找的对象&#xff0c;来操作所指向的对象。 #define _CRT_SECUR…

软件测试--接口测试

接口测试&#xff1a;直接对后端服务的测试&#xff0c;是服务端性能测试的基础 接口&#xff1a;系统之间数据交互的通道 接口测试&#xff1a;校验接口响应数据与预期数据是否一致

06-07 - 变量的高级主题

---- 整理自狄泰软件唐佐林老师课程 文章目录 1. 变量值的替换2. 变量的模式替换3. 规则中的模式替换4. 变量值的嵌套使用5. 命令行变量6. 环境变量7. 目标变量&#xff08;局部变量&#xff09;8. 模式变量9. 工程 1. 变量值的替换 使用指定字符&#xff08;串&#xff09;替…

DMAR: [INTR-REMAP] Present field in the IRTE entry is clear 的解决办法

问题描述 在使用FPGA开发PCIe的MSI-X中断相关功能时&#xff0c;一次测试过程中dmesg打印出如下错误&#xff0c;使用cat /proc/interrupts查看FPGA的PCIe驱动程序未收到MSIX中断。使用的系统为基于Intel x86_64的linux&#xff08;RHEL8.9&#xff09;&#xff0c;基于Xilinx …

SQL注入实例(sqli-labs/less-1)

初始网页 从网页可知传递的参数名为 id&#xff0c;并且为数字类型 1、得知数据表有多少列 1.1 使用联合查询查找列数&#xff08;效率低&#xff09; http://localhost/sqli-labs-master/Less-1/?id1 union select 1,2 -- 1.2 使用order by查找列数&#xff08;效率高&…

贪心问题 难度[普及-]一赏

目录 #小A的糖果 删数问题 陶陶摘苹果&#xff08;升级版&#xff09; P5019 NOIP2018 提高组 铺设道路 小A的糖果 原文链接: P3817 小A的糖果 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目描述 小 A 有 n 个糖果盒&#xff0c;第 i 个盒中有 a_i 颗糖果。 小 A 每…

V23 中的新功能:LEADTOOLS 展示了它的 EXCEL-lence

LEADTOOLS (Lead Technology)由Moe Daher and Rich Little创建于1990年&#xff0c;其总部设在北卡罗来纳州夏洛特。LEAD的建立是为了使Daher先生在数码图象与压缩技术领域的发明面向市场。在过去超过30年的发展历程中&#xff0c;LEAD以其在全世界主要国家中占有的市场领导地位…

为什么你的企业需要微信小程序?制作微信小程序有什么好处?

什么是小程序&#xff1f; WeChat小程序作为更大的WeChat生态系统中的子应用程序。它们就像更小、更基本的应用程序&#xff0c;在更大的应用程序&#xff08;WeChat&#xff09;中运行。这些程序为用户提供了额外的高级功能&#xff0c;以便在使用WeChat服务时加以利用。根据…