网络爬虫urllib库常用函数解析

news2024/11/15 17:26:22

文章目录

  • 前言
  • urllib介绍
  • urllib发送请求
  • urllib编码与解码
  • urllib异常处理
  • urllib使用IP代理
  • urllib使用cookie

前言

快期末了,有个数据挖掘的大作业需要用到python的相关知识(这太难为我这个以前主学C++的人了,不过没办法还是得学😂),下面是我在学习爬虫相关知识时总结的一些东西,我对于python不是很熟悉,如果下面的一些知识点有哪里出问题或者有不同理解的,请一定一定要在评论区提出来,让我这个菜鸡学习学习~~/(ㄒoㄒ)/~~
在这里插入图片描述


urllib介绍

  • urllib是Python自带的标准库中用于网络请求的库,无需安装,直接引用即可

  • 通常用于爬虫开发、API(应用程序编程接口)数据获取和测试

  • urllib库的4大模块

      urllib.request :用于打开和读取URL
      urllib.error:包含提出的例外(异常)urllib.request
      urllib.parse:用于解析URL
      urllib.robotparser:用于解析robots.txt文件
    

urllib发送请求

  • urllib.request厍
    ①模拟浏览器发起一个HTTP请求,并获取请求响应结果
  • urllib.request.urlopen的语法格式
    ①urlopen(url,data=None,[timeout,], cafile=None, capath=None,cadefault=False, context=None)
  • 参数说明
    ①url: url参数是str类型的地址,也就是要访问的URL,例如:https:7/www.baidu.com
    ②data:默认值为None,urllib判断参数data是否为None从而区分请求方式。或参数data为None,则代表请求方式为Get,反之请求方式为Post,发送Post请求。
    参数data以字典的形式存储数据,并将参数data由字典类型转换成字节类型才能完成Post请求
  • urlopen函数返回的结果是一个http.client.HTTPResponse对象

1、发送Get请求示例
http://www.biqugebook.la/发送请求

import urllib.request
url = "http://www.biqugebook.la/"

# 发送请求(GET请求)
resp = urllib.request.urlopen(url)
# 通过查看网页的源代码选择是转换成gbk还是utf-8
html = resp.read().decode('utf-8')# 将bytes转成utf-8
print(html)

运行结果:
在这里插入图片描述

2、urllib请求中添加头部示例
为什么要这添加头部呢,那是因为有些网站有一些简单的反爬虫机制,所以在一些情况下我们在urllib的请求中添加一个头部就可以模拟是浏览器对网站进行访问,而不是爬虫,看示例👇
不加头部的情况

import urllib.request


url = "https://movie.douban.com/"

resp = urllib.request.urlopen(url)
# 从响应结果中读取数据
html = resp.read().decode("utf-8")
print(html)

运行结果:
在这里插入图片描述
加了头部的情况

import urllib.request
url = "https://movie.douban.com/"
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.100 Safari/537.36'}
req = urllib.request.Request(url,headers=headers)
resp = urllib.request.urlopen(req)
# 从响应结果中读取数据
html = resp.read().decode("utf-8")
print(html)

在这里插入图片描述


urllib编码与解码

这个用在哪里呢,看这里👇
在这里插入图片描述
以上的操作都是由urllib的编码解码来实现的,当我们在搜索引擎中输入中文"码农",它会将中文编码成特定的一串字符代表"码农"
1、urllib编码解码示例

import urllib.parse
kw = {"wd":"码农"}
# 编码
result = urllib.parse.urlencode(kw)
print(result)
# 解码
res = urllib.parse.unquote(result)
print(res)

运行结果:
在这里插入图片描述


urllib异常处理

就和C++的异常处理的机制相似,当我们对网站发送一些请求或一些其他操作时,如果出现错误,那么就会抛出异常
1、urllib异常处理示例

import urllib.request
import urllib.error

url = "http://www.google.com"
# 下面这才是正确的网站地址,如果url为上面那个则发送错误
# url = "http://www.google.cn"
try:
    resp = urllib.request.urlopen(url)
# 接收异常
except urllib.error.URLError as e:
    print(e)

运行结果:
在这里插入图片描述


urllib使用IP代理

这也是一种对抗反爬虫的方法,因为有些网站会检测一个IP是否在一段时间一直对网站进行访问,如果我们使用一些高匿的IP代理就可以解决这个问题
免费IP代理网站分享
在这里插入图片描述

from urllib.request import build_opener
from urllib.request import ProxyHandler

# 创建代理(服务器那边接收到的IP就是代理的IP,这也是为了避免反爬虫)
# 键是表示类型,值则是IP地址和端口号
proxy = ProxyHandler({"HTTP":"47.101.44.122:80"})
opener = build_opener(proxy)

url = "https://www.baidu.com"
resp = opener.open(url)
print(resp.read().decode("utf-8"))

urllib使用cookie

1、为什么需要cookie:解决http的无状态性,为了让服务器知道我们这次的请求和上次请求的关联
2、使用步骤
①实例化MozillaCookieJar(保存cookie)
②创建handle对象(cookie的处理器)
③创建opener对象
④打开网页(发送请求获取响应)
⑤保存cookie文件

1、获取cookie

import urllib.request
from http import cookiejar
filename = "cookie.txt"

# 获取cookie
def get_cookie():
    # (1)实例化一个MozillaCookieJar(用于保存cookie)
    cookie = cookiejar.MozillaCookieJar(filename)
    # (2)创建handler对象
    handler = urllib.request.HTTPCookieProcessor(cookie)
    # (3)创建opener对象
    opener = urllib.request.build_opener(handler)

    # (4)请求网站
    url = "https://tieba.baidu.com/index.html?traceid=#"

    # (5)存储cookie文件
    cookie.save()

运行结果:(生成一个cookie.file文件)
在这里插入图片描述

2、加载cookie

def use_cookie():
    # 实例化MozillaCookieJar
    cookie = cookiejar.MozillaCookieJar()
    # 加载cookie文件
    cookie.load(filename)
    print(cookie)

运行结果:
在这里插入图片描述

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

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

相关文章

我的周刊(第069期)

我的信息周刊,记录这周我看到的有价值的信息,主要针对计算机领域,内容主题极大程度被我个人喜好主导。这个项目核心目的在于记录让自己有印象的信息做一个留存以及共享。🎯 项目ChatGPT[1]本周最火爆的项目是 ChatGPT 应该没有意义…

ChatGPT使用初体验

ChatGPT使用初体验 注册chatGPT ChatGPT官网:https://openai.com/blog/chatgpt/ 登录官网进行账号注册: 我相信以各位小伙伴的能力是可以成功注册到账号的。 ChatGPT使用 自从在抖音上、CSDN上看到众多大佬对ChatGPT的一致好评,顿时我就…

论文笔记-时序分类-Rocket

论文标题: ROCKET: exceptionally fast and accurate time series classification using random convolutional kernels 论文链接: https://www.xueshufan.com/publication/3042807565 代码链接: https://github.com/angus924/rocket 发表年份…

Linux系统网络编程——第十九节 多路复用(1)(概念、select、poll)

目录 概念引出 select select的特点 select缺点 poll 概念引出 我们来思考一个问题: 什么叫IO(input output)? 读取或者写入(IO)本质就是:等拷贝。 读:等将数据从内核空间(缓冲区)拷贝…

C++(第十一篇):继承(基类与派生类、菱形继承和菱形虚拟继承问题)

📒博客主页:Morning_Yang丶 🎉欢迎关注🔎点赞👍收藏⭐️留言📝 📌本文所属专栏:【C拒绝从入门到跑路】 🙏作者水平有限,如果发现错误,敬请指正&am…

虚拟机||后续1:使用Virtual Box7.0.4安装Ubuntu20.04图文教程+解决时间显示乱码问题

这个博主超爱碎碎念:) 哈喽,四海八方的友友们,我胡汉三又回来啦( ̄︶ ̄)↗ 有挺长一段时间没更新了,转眼间12月了,又到年底冲业绩的时候啦ψ(`∇)ψ…

【大数据入门核心技术-Hadoop】(七)Hadoop基本Shell命令行

目录 一、 三种shell命令方式 二、常见Shell操作命令 1、创建文件夹 2、查看指定目录下内容 3、上传文件到HDFS指定目录下 4、查看HDFS文件内容 5、下载HDFS文件 6、拷贝HDFS文件 7、追加数据到HDFS文件中 8、HDFS数据移动操作 9、创建文件 10、查看磁盘使用情况 1…

金融信创与云化转型|基金超融合架构转型与场景探索合集

随着数字化经济的蓬勃发展,基金数字化转型作为金融行业发展的重点被提上日程。其中,证监会于 2022 年 4 月发布的《关于加快推进公募基金行业高质量发展的意见》中强调,基金行业应强化行业基础设施建设,以拥抱数字化金融市场&…

MySQL内置函数

MySQL内置函数1 .日期函数2.字符串函数3.数学函数4.其它函数5.综合练习题1 .日期函数 current_date() 当前日期获得年月日 mysql> select current_date(); ---------------- | current_date() | ---------------- | 2022-12-10 | ---------------- 1 row in set (0.0…

C语言基础—程序创建过程和编译过程

C程序的创建过程 4️⃣ C 程序的创建过程有4️⃣个基本步骤: 编写、编译、链接和运行。 编写:用文本编辑器或IDE编写源代码。源代码包含程序所需的所有命令和语句。编译:使用编译器对源代码进行编译,生成可执行文件。 - .o 文件…

gyp ERR find Python 解决方案

命令行报错如下 E:\vue-admin\node_modules\fibers>if not defined npm_config_node_gyp (node "D:\nodejs\node_modules\npm\node_modules\npm-lifecycle\node-gyp-bin\\..\..\node_modules\node-gyp\bin\node-gyp.js" rebuild --releas e ) else (node "…

Java项目:SSM物流快递管理系统

作者主页:源码空间站2022 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 仓库管理员角色包含以下功能: 仓库管理员操作,入库操作,员工查看,揽收快件,新建员工等功能。 快递员角色包含以下功能: …

Nacos服务注册解析

服务注册就是在微服务启动时自动注册进nacos注册中心,核心逻辑就是在启动时调用nacos-server端的http接口:/nacos/v1/ns/instance,具体参考nacos官方文档。 我们打开nacos源码结构查看 上图为Nacos2.2的源码结构.其中比较核心的就是这几个包&#xff1…

墨者学院 PHP代码分析溯源(第4题) 详解

今天继续给大家介绍CTF通关writeup,本文主要内容是墨者学院 PHP代码分析溯源(第4题)。 免责声明: 本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为,否则造成一切严重后果自负! 再次强调:严…

尝试使用CubeMX做stm32开发之十四:FatFs的基础知识

一、文件系统概念 文件系统:在存储介质中建立一种组织架构,以更好地储存和管理数据 文件系统一般包含:操作系统引导区、目录、文件等 文件系统中数据以文件的形式存储 文件系统中数据的存取需要遵循特定的格式 与直接操作存储介质相比&a…

[附源码]计算机毕业设计基于SpringBt的演唱会购票系统论文2022Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

C++ MySQL Error 1366 incorrect string value引发的认识

C MySQL Error 1366 incorrect string value引发的认识 前言 在使用MySQL C API编写程序时,由于用到了中文,导致出现了MySQL error 1366 incorrect string value 问题,但令我同样不解的是我用同样的语句在cmd下可以正常执行。(M…

【算法】动态规划 ⑤ ( LeetCode 63.不同路径 II | 问题分析 | 动态规划算法设计 | 代码示例 )

文章目录一、问题分析二、动态规划算法设计1、动态规划状态 State2、动态规划初始化 Initialize3、动态规划方程 Function4、动态规划答案 Answer三、代码示例LeetCode 63. 不同路径 II : https://leetcode.cn/problems/unique-paths-ii/ 一个机器人位于一个 m x n 网格的左上…

java初步学习 String(基于小李的课进行自学,初学者)12

初步学习 String 基本概念 String类型即为字符串类型,即“103”,“abc”,"小陈"等字符类型,在工作中可用于加密,替换,截取,查找等工作 不过这种名词显然不能联想到工作的实际样子 例:…

[附源码]Python计算机毕业设计SSM基于框架的旅游订票系统(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…