网络爬虫——urllib(5)

news2025/2/25 21:02:30

前言🍭

 ❤️❤️❤️网络爬虫专栏更新中,各位大佬觉得写得不错,支持一下,感谢了!❤️❤️❤️

Python网络爬虫_热爱编程的林兮的博客-CSDN博客

上一篇我们讲解有关ajax的相关案例,下面我们来学习新的关于urllib的知识。

11、URLError\HTTPError🍉

简介:

  1. HTTPError类是URLError类的子类
  2. 导入的包urllib.error.HTTPError urllib.error.URLError
  3. http错误:http错误是针对浏览器无法连接到服务器而增加出来的错误提示。引导并告诉浏览者该页是哪里出 了问题。
  4. 通过urllib发送请求的时候,有可能会发送失败,这个时候如果想让你的代码更加的健壮,可以通过try‐ except进行捕获异常,异常有两类,URLError\HTTPError

那我们下面来举一个例子,获取下面页面的网页源码

正常代码:

# 异常
import urllib.request

url ="https://blog.csdn.net/m0_63951142/article/details/134013573"

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'
}

request = urllib.request.Request(url = url, headers = headers)

response = urllib.request.urlopen(request)

content =response.read().decode('utf-8')

print(content)

运行代码: 

我们这是不是就爬取成功了,但是如果我们万一有哪些地方出错了,比如url多了一个1,我们就需要添加try‐ except进行捕获异常

# 异常
import urllib.request
import urllib.error

url ="https://blog.csdn.net/m0_63951142/article/details/1340135731"

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'
}

try:
    request = urllib.request.Request(url = url, headers = headers)
    
    response = urllib.request.urlopen(request)
    
    content =response.read().decode('utf-8')
    
    print(content)
except urllib.error.HTTPError:
    print('系统正在升级!')

我们这代码url错误,可以提供添加try‐ except进行捕获异常

运行结果:

 那么什么时候报URLError呢?一般是主机地址和参数地址错误

# 异常
import urllib.request
import urllib.error

# url ="https://blog.csdn.net/m0_63951142/article/details/1340135731"
url = "https://www.linxi.com"

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'
}

try:
    request = urllib.request.Request(url = url, headers = headers)

    response = urllib.request.urlopen(request)

    content =response.read().decode('utf-8')

    print(content)
except urllib.error.HTTPError:
    print('系统正在升级!')

运行结果: 

这时候就会报URLError了

那我们一样添加try‐ except进行捕获异常:

# 异常
import urllib.request
import urllib.error

# url ="https://blog.csdn.net/m0_63951142/article/details/1340135731"
url = "https://www.linxi.com"

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'
}

try:
    request = urllib.request.Request(url = url, headers = headers)

    response = urllib.request.urlopen(request)

    content =response.read().decode('utf-8')

    print(content)
except urllib.error.HTTPError:
    print('系统正在升级!')
except urllib.error.URLError:
    print('系统真的在升级!!!!')

 运行结果:

12、cookie登录🍉

那什么是cookie登录呢?

在适用的场景下,数据采集的时候 需要绕过登陆 然后进入到某个页面

 我们打算去获取下面这个页面的源码

代码: 

# 适用的场景:数据采集的时候 需要绕过登陆 然后进入到某个页面

import urllib.request

url = 'https://weibo.cn/6451491586/info'

headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                  'Chrome/92.0.4515.159 Safari/537.36',
}
# 请求对象的定制
request = urllib.request.Request(url=url, headers=headers)
# 模拟浏览器向服务器发送请求
response = urllib.request.urlopen(request)
# 获取响应的数据
content = response.read().decode('utf-8')

# 将数据保存到本地
with open('weibo.html', 'w', encoding='utf-8') as fp:
    fp.write(content)

运行结果: 

发现报错了,提示字符编码不对,不是utf-8,难度页面字符编码不是utf-8吗?

这是因为这是一个经典的反爬手段(个人信息页面是utf-8  但是还报错了编码错误 ,因为并没有进入到个人信息页面 而是跳转到了登陆页面 )

可以看到这不是utf-8,所以我们需要去修改我们的代码,获取的响应数据时的decode应该设置为(gb2312) 

import urllib.request

url = 'https://weibo.cn/6451491586/info'

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'
}
# 请求对象的定制
request = urllib.request.Request(url=url, headers=headers)
# 模拟浏览器向服务器发送请求
response = urllib.request.urlopen(request)
# 获取响应的数据
content = response.read().decode('gb2312')

# 将数据保存到本地
with open('weibo.html', 'w', encoding='gb2312') as fp:
    fp.write(content)

我们继续运行代码,就将源码下载下来了:

在浏览器打开html页面,但是它会一直在转圈圈:

这是因为什么呢? 因为请求头的信息不够  所以访问不成功

所以我们在Request Headers中需要添加新的信息:

# 适用的场景:数据采集的时候 需要绕过登陆 然后进入到某个页面
# 个人信息页面是utf-8  但是还报错了编码错误  因为并没有进入到个人信息页面 而是跳转到了登陆页面
# 那么登陆页面不是utf-8  所以报错

# 什么情况下访问不成功?
# 因为请求头的信息不够  所以访问不成功

import urllib.request

url = 'https://weibo.cn/6451491586/info'

headers = {
    # 带冒号的不好使
    # ':authority': 'weibo.cn',
    # ':method': 'GET',
    # ':path': '/6451491586/info',
    # ':scheme': 'https',
    'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,'
              'application/signed-exchange;v=b3;q=0.9',
    # 'accept-encoding': 'gzip, deflate, br',
    'accept-language': 'zh-CN,zh;q=0.9',
    'cache-control': 'max-age=0',
    #     cookie中携带着你的登陆信息   如果有登陆之后的cookie  那么我们就可以携带着cookie进入到任何页面
    'Cookie':
        '_T_WM=c30cd9c6bbd4e3f6963240e4ec5927e6; '
        'SCF=AmeKosmGUnLyr9H5qopjdzxVakJQ0XnKcsbBtXbpbfngNvC68bT8XtEFYNSLcmIZq5SekJex9dp6Cp7ElZCvRiA.; '
        'SUB=_2A25IRKWMDeRhGeFG71cU9SfLzjyIHXVrxsvErDV6PUJbktAGLUf_kW1NeWNVsDeUrMMUB6xCyXlFfJTZ01NU-9X5; '
        'SUBP=0033WrSXqPxfM725Ws9jqgMF55529P9D9WWIIQ848qLW89oxupijIfuB5JpX5K-hUgL.FoMRSh-fSK.NSK52dJLoIpRLxK'
        '-L1hqLBoMLxK-L1h'
        '-LB--LxK.L1-zLB-2peoet; SSOLoginState=1698747869; ALF=1701339869',
    # referer  判断当前路径是不是由上一个路径进来的    一般情况下 是做图片防盗链
    'referer': 'https://weibo.cn/',
    'sec-ch-ua': '"Chromium";v="92", " Not A;Brand";v="99", "Google Chrome";v="92"',
    'sec-ch-ua-mobile': '?0',
    'sec-fetch-dest': 'document',
    'sec-fetch-mode': 'navigate',
    'sec-fetch-site': 'same-origin',
    'sec-fetch-user': '?1',
    'upgrade-insecure-requests': '1',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                  'Chrome/92.0.4515.159 Safari/537.36',
}
# 请求对象的定制
request = urllib.request.Request(url=url, headers=headers)
# 模拟浏览器向服务器发送请求
response = urllib.request.urlopen(request)
# 获取响应的数据
content = response.read().decode('utf-8')

# 将数据保存到本地
with open('weibo.html', 'w', encoding='utf-8') as fp:
    fp.write(content)

注:字符编码需要重新修改为utf-8

运行成功,我们继续在浏览器中打开wbibo.html:

成了! 

通过以上步骤,我们就可以实现爬虫cookie登录,从而获取目标网站的数据。需要注意的是,不同的网站可能有不同的登录机制,因此在实际操作时需要根据具体情况进行调整。

 

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

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

相关文章

开发小程序需要多少钱?

随着移动互联网的快速发展,小程序已经成为了企业、个人创业者获取用户、提升品牌影响力的重要工具。然而,对于许多初次接触小程序的人来说,开发小程序需要多少钱,是他们最关心的问题。 首先我们需要明确的是,开发小程…

AI技术发展:防范AI诈骗,守护数字安全

随着AI技术的迅猛发展,人工智能赋予了计算机更多的能力,包括自然语言处理、图像生成、声音合成等。这些领域的突破为人们提供了全新的体验和便捷,但同时也催生了一些潜在的安全风险,其中最突出的就是AI诈骗。本文将探讨如何防范AI…

echarts 地图迁徙与地图下钻

echarts 地图迁徙与地图下钻 一、迁徙 1、引入中国地图数据及echarts const china require("./echarts-mapJson-master/china.json") import * as echarts from echarts2、数据准备 // 点数据 需要hover或点击获取数据可以添加额外的参数, // 如{ val…

前端开发必知:HTML、Vue和React中的跨域页面跳转解决方案

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

万物皆可“云” 从杭州云栖大会看数智生活的未来

文章目录 前言一、云栖渐进:一个科技论坛的变迁与互联网历史互联网创新创业飞天进化飞天智能驱动数字中国 二、2023云栖大会:云计算人工智能 玩出科技跨界新花样大会亮点重磅嘉宾热门展览算力馆人工智能馆产业创新馆 总结 前言 10月31日,202…

查询平均提速 700%,奇安信基于 Apache Doris 升级日志安全分析系统

本文导读: 数智时代的到来使网络安全成为了不可忽视的重要领域。奇安信作为一家领先的网络安全解决方案领军者,致力于为企业提供先进全面的网络安全保护,其日志分析系统在网络安全中发挥着关键作用,通过对运行日志数据的深入分析…

做好团队沟通和协调 不可忽略的5个重点

做好团队的沟通和协调,可以确保成员之间及时交流、分享信息和解决问题。这有助于避免信息滞后和工作冲突,提高工作效率。如果沟通不顺畅,往往导致成员间信息传递不及时或遗漏,容易产生误解和冲突,影响项目进度地顺利开…

【LVS实战】02 搭建一个LVS-NAT模式实验

一、网络结构 用虚拟机搭建如下的几台机器,并配置如下的ip 关于虚拟机网卡和网络的配置,可以参考 iptables章节,05节:网络转发实验 主机A模拟外网的机器 B为负载均衡的机器 C和D为 RealServer 二、C和D主机的网关设置 C和D机…

专业医学病例翻译公司推荐

我们知道,医学病例翻译在涉外看病的患者中具有广泛的应用,它可以帮助医生快速了解患者的病情,为治疗和药物处方提供关键信息。因此,对于出国看病的患者,医学病例翻译便成了不可或缺的重要工具。 翻译医学病例不仅要求译…

使用 Node.js 搭建 API 网关

您好, 如果喜欢我的文章或者想上岸大厂,可以关注公众号「量子前端」,将不定期关注推送前端好文、分享就业资料秘籍,也希望有机会一对一帮助你实现梦想 外部客户端访问微服务架构中的服务时,服务端会对认证和传输有一些…

如何将微信视频号的视频保存到手机相册?

微信视频号是近年来微信推出的一项功能,它允许用户通过手机拍摄和分享短视频内容。然而,许多人纷纷表示他们想要保存微信视频号上的视频,以便在离线时观看。但一直以来这个需求腾讯一直没有开放随后也取消了复制视频链接功能,为此…

最全的操作系统原版镜像,镜像winxp、win7、8、10、11,win server2008、2012、2016、2019、2022各版本系统下载 址

1、 MSDN原版系统(我告诉你) [软件、镜像下载地址](https://www.imsdn.cn/)2、 HelloWindows.cn 精校 完整 极致 Windows系统下载仓储站 镜像、软件下载地址 3、系统库 镜像下载地址 4、 山己几子木 镜像下载地址

Redis Predixy 集群

文章目录 一、概述二、测试规划三、Redis 服务实例准备3.1 配置Redis实例3.2 创建相关资源3.2 启动Redis服务实例 四、Sentinel 监控准备4.1 配置 sentine l3.2 开启 Sentinel 五、安装配置 Predixy5.1 下载 Predixy5.2 配置 Predixy5.3 启动 Predixy 代理 六、测试 如果您对Re…

快手协议算法最新版

快手的协议分析是指对快手算法系统进行分析,以了解其推荐内容和个性化用户体验的机制。 然而,一般来说,协议分析的目标是理解算法系统中各个组成部分的功能和作用,以及它们之间的相互关系。以下是一些常见的分析方向:…

Jmeter之JSR223

一、JSR223组件 JSR是Java Specification Requests的缩写,意思是Java规范提案。JSR已成为Java界的一个重要标准. JSR223其实包含了有好几种组件,但是其用法都是一致的,并且都是执行一段代码,主要分类如下: JSR223 PreProcessor JSR223 Timer JSR223 S…

高防CDN如何在防护cc上大显神通

高级防御CDN(Content Delivery Network)在对抗CC(HTTP Flood)攻击方面扮演着关键的角色,具备以下重要职能和作用: 流量分散:CC攻击的目标是通过大规模的HTTP请求使服务器过载,从而导…

【Docker】十分钟完成mysql8安装,你也可以的!!!

十分钟完成mysql8安装,你也可以的 前言安装步骤1.创建安装目录2.创建docker-compose.yml3.启动容器4.mysql开启远程连接5.连接mysql 总结 前言 本文基于Docker安装mysql:8.0.29,首先确保系统安装了docker和docker-compose。 没有使用过docker朋友可以去…

flink的安装与使用(ubuntu)

组件版本 虚拟机:ubuntu-20.04.6-live-server-amd64.iso flink:flink-1.18.0-bin-scala_2.12.tgz jdk:jdk-8u291-linux-x64.tar flink 下载 1、官网:https://flink.apache.org/downloads/ 2、清华镜像:https://mirr…

vue3+vite实现一个后台管理框架,毒蘑菇后台管理。

写后台管理的项目写了很多个了,虽说用的别人的模板,自己专注于自己的业务,保证自己的业务不出错就行了,但是自定义配置又不好去配置,大家用的模板都差不多,用模板自带的业务功能呢后台又得是模板自带的&…

Linu之VM及WindowsServer安装

# 1.操作系统 ## 1.1.什么是操作系统 操作系统(Operating System,简称OS)是一种系统软件,它是计算机硬件和应用软件之间的桥梁。它管理计算机的硬件和软件资源,为应用程序提供接口和服务,并协调应用程序的…