网络爬虫——urllib(5)

这篇具有很好参考价值的文章主要介绍了网络爬虫——urllib(5)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言🍭

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

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

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

网络爬虫——urllib(5),Python网络爬虫,1024程序员节,爬虫,python

正常代码:

# 异常
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)

运行代码: 

网络爬虫——urllib(5),Python网络爬虫,1024程序员节,爬虫,python

我们这是不是就爬取成功了,但是如果我们万一有哪些地方出错了,比如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进行捕获异常

运行结果:

网络爬虫——urllib(5),Python网络爬虫,1024程序员节,爬虫,python

 那么什么时候报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('系统正在升级!')

运行结果: 

网络爬虫——urllib(5),Python网络爬虫,1024程序员节,爬虫,python

这时候就会报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('系统真的在升级!!!!')

 运行结果:

网络爬虫——urllib(5),Python网络爬虫,1024程序员节,爬虫,python

12、cookie登录🍉

那什么是cookie登录呢?

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

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

网络爬虫——urllib(5),Python网络爬虫,1024程序员节,爬虫,python

代码: 

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

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)

运行结果: 

网络爬虫——urllib(5),Python网络爬虫,1024程序员节,爬虫,python

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

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

网络爬虫——urllib(5),Python网络爬虫,1024程序员节,爬虫,python

可以看到这不是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)

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

网络爬虫——urllib(5),Python网络爬虫,1024程序员节,爬虫,python

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

网络爬虫——urllib(5),Python网络爬虫,1024程序员节,爬虫,python

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

网络爬虫——urllib(5),Python网络爬虫,1024程序员节,爬虫,python

所以我们在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:

网络爬虫——urllib(5),Python网络爬虫,1024程序员节,爬虫,python

成了! 

网络爬虫——urllib(5),Python网络爬虫,1024程序员节,爬虫,python

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

 

网络爬虫——urllib(5),Python网络爬虫,1024程序员节,爬虫,python文章来源地址https://www.toymoban.com/news/detail-739022.html

到了这里,关于网络爬虫——urllib(5)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 解决github ping不通的问题(1024程序员节快乐!

    1024程序员节快乐!( 随便粘贴一个文档,参加活动 域名解析(域名-IP):https://www.ipaddress.com/ Ubuntu平台 github经常ping不通或者访问缓慢,方法是更改hosts文件 在hosts里添加github的ip 140.82.114.4 www.github.com 199.232.5.194 github.global.ssl.fastly.net 54.231.114.219 github-cloud.s3.amazonaws.com 可以访

    2024年01月18日
    浏览(80)
  • 1024程序员节特辑:【Spring Boot自动配置原理揭秘】

    主页传送门:📀 传送   Spring Boot 是一个用于创建独立的、生产级别的 Spring 应用程序的框架。它极大地简化了 Spring 应用程序的开发过程,其中一个关键的功能就是自动配置(Auto-Configuration)。   自动配置可以根据项目需求自动配置各种服务和组件,它可以帮助开发者

    2024年02月08日
    浏览(69)
  • 好用且免费的CodeWhisperer,给1024程序员节送礼来了

          国庆期间没有胆量去人从众的景点,关在家里刷手机时意外在亚马逊的User Group公众号上发现了CodeWhisperer这么个好东西(bu yao qian),以后撸代码也可以提高生产力(fang yang mo yu)了,这还不赶紧上手试一下。看官方介绍说它支持流行的IDE开发工具,包括VS Code、Intelli

    2024年02月08日
    浏览(54)
  • 1024程序员节带你玩转图片Exif信息获取之JavaScript

    目录 一、前言 二、背景 三、Exif.js          1、Exif.js 简介 2、Exif.js 引入 四、多场景展示数据获取 1、原始图片直接获取  2、base64 编码文件加载  3、文件上传的方式加载  五、总结        1024是2的十次方,二进制计数的基本计量单位之一。1G=1024M,而1G与1级谐音,也有一

    2024年02月20日
    浏览(60)
  • Python网络爬虫库urllib详解

    了解Python标准库中的urllib模块,掌握URL解析、发送HTTP请求、文件下载等操作。

    2024年02月08日
    浏览(53)
  • 1024程序员节特辑 | Spring Boot实战 之 MongoDB分片或复制集操作

    Spring实战系列文章: Spring实战 | Spring AOP核心秘笈之葵花宝典 Spring实战 | Spring IOC不能说的秘密? 国庆中秋特辑系列文章: 国庆中秋特辑(八)Spring Boot项目如何使用JPA 国庆中秋特辑(七)Java软件工程师常见20道编程面试题 国庆中秋特辑(六)大学生常见30道宝藏编程面试题

    2024年02月08日
    浏览(82)
  • 1024程序员节特辑 | ELK+ 用户画像构建个性化推荐引擎,智能实现“千人千面”

    专栏集锦,大佬们可以收藏以备不时之需 Spring Cloud实战专栏:https://blog.csdn.net/superdangbo/category_9270827.html Python 实战专栏:https://blog.csdn.net/superdangbo/category_9271194.html Logback 详解专栏:https://blog.csdn.net/superdangbo/category_9271502.html tensorflow专栏:https://blog.csdn.net/superdangbo/category_869

    2024年02月07日
    浏览(84)
  • 1024程序员节特辑 | 解密Spring Cloud Hystrix熔断提高系统的可用性和容错能力

    专栏集锦,大佬们可以收藏以备不时之需 Spring Cloud实战专栏:https://blog.csdn.net/superdangbo/category_9270827.html Python 实战专栏:https://blog.csdn.net/superdangbo/category_9271194.html Logback 详解专栏:https://blog.csdn.net/superdangbo/category_9271502.html tensorflow专栏:https://blog.csdn.net/superdangbo/category_869

    2024年02月08日
    浏览(55)
  • 1024程序员节?我们整点AI绘图玩玩吧,一文教你配置stable-diffusion

    需提前准备:一台高性能的电脑(尤其是显存)、python、Git、梯子。 其实Github上有很多关于Stable diffusion的库,综合对比之后,我选取的是比较全面的AUTOMATIC1111这个,源码链接:Stable-diffusion(Github) 找到安装那块的教程,此教程以windows为例。 ps:如果你电脑上已经有了pyt

    2024年01月16日
    浏览(74)
  • PHP框架开发实践 | 1024 程序员节:通过index.php找到对应的controller是如何实现的

    🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年6月CSDN上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。 🏆本文已收录于PHP专栏:PHP进阶实战教程。 🎉欢迎 👍点赞✍评论⭐收藏

    2024年02月08日
    浏览(72)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包