数据采集与清洗基础习题(二)Python爬虫常用模块,头歌参考答案

 数据采集习题参考答案,会持续更新,点个关注防丢失。为了方便查找,已按照头歌重新排版,朋友们按照头歌所属门类查找实训哦,该篇为Python爬虫常用模块。

创作不易,一键三连给博主一个支持呗。

文章目录

实训一:urllib 爬虫

第一关:urllib基础

 第一关答案

第二关:urllib进阶

第二关答案

实训二:requests 爬虫

第一关:requests 基础

第一关答案

第二关:requests 进阶

第二关答案


实训一:urllib 爬虫

读取 URL、下载网页是爬虫必备而且关键的功能,需要和 HTTP 请求打交道。而 urllib 是 Python 中的一个功能强大、用于操作 URL 的库。 本实训主要介绍如何使用 urllib 库进行网页爬取。

第一关:urllib基础

本关任务:掌握 urlopen 函数的使用,完成一个简易的爬取程序。

urlopen函数

urlopen 函数是 urllib 模块下的一个方法,用于实现对目标 url 的访问。函数原型如下:

import urllib    # 导入urllib包
urllib.request.urlopen(url, data=None, cafile=None, capath=None,
cadefault=False, context=None)

参数说明:

  • url 参数:统一资源定位符,目标资源在网络中的位置(如:https://www.xxx.com/);
  • data 参数:data 用来指明发往服务器请求中的额外信息,data 必须是一个字节数据对象,默认为 None;
  • cafile、capath、cadefault 参数:用于实现可信任的 CA 证书的 HTTP 请求;
  • context 参数:实现 SSL 加密传输。

urlopen函数的使用

现在通过访问百度网站,演示如何使用 urlopen 函数。代码如下:

import urllib
response = urllib.request.urlopen(url="http://www.baidu.com")  # 打开百度网站
print(type(response))  # 打印数据类型

 第一关答案

import urllib.request
def request(url):'''一个参数:param url:请求网址:return:返回一个请求的字符串。编码为utf-8'''# *************** Begin *************** #r=urllib.request.urlopen(url) return r.read().decode('utf-8')# *************** End ***************** #

第二关:urllib进阶

本关任务:利用 Opener 方法,完成一个简易的爬取程序。

Request类

第一关介绍了 urlopen(),它可以实现最基本的请求发起,但构建还不是一个完整的请求,如果请求中需要加入 headers 等信息,需要利用更强大的 Request 类来构建一个请求。

request 是 urllib 库的一个重要模块, 提供了最基本的构造 HTTP 请求的方法,利用它可以模拟浏览器的一个请求发起过程,可以用来发送 request 和获取 request 的结果。模拟更真实地 request 请求需要构造 request 类,函数表达式如下所示:

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

参数说明:

  • url: 统一资源定位符,这个是必传参数,其他的都是可选参数;
  • data: 传递的表单,参数如果要传必须传 bytes (字节流)类型的;
  • headers: 请求头,参数是一个字典,包含 cookie,User-Agent 等信息,用于模拟更真实的用户访问,是常见的反爬措施之一。

Opener方法 

之前我们学习了如何构造 Request,但是一些更高级的操作,比如 Cookies 处理、代理该怎样来设置?urllib.request 拥有一些高级特性,这些特性可以做到任何 HTTP 请求中所有的事情。下面演示如何获取网站的 Cookie。

import http.cookiejar, urllib.request  # 导入相关库
cookie = http.cookiejar.CookieJar()   # 创建 CookieJar 对象
handler = urllib.request.HTTPCookieProcessor(cookie)  # 利用 HTTPCookieProcessor 来构建一个 handler
opener = urllib.request.build_opener(handler)  # 利用 build_opener 方法构建出 opener 
response = opener.open('http://www.baidu.com')  # 执行 open()
# 打印 Cookie
for item in cookie:print(item.name+"="+item.value)

第二关答案

import urllib.request
import http.cookiejar
def request(url,headers):'''两个参数:param url:统一资源定位符,请求网址:param headers:请求头:return:html'''# ***************** Begin ******************** #cookie = http.cookiejar.CookieJar()handler = urllib.request.HTTPCookieProcessor(cookie) opener = urllib.request.build_opener(handler)r=  opener.open(url)# ***************** End ******************** #html = r.read().decode('utf-8')return html

实训二:requests 爬虫

第一关:requests 基础

编程要求

根据提示,在右侧编辑器 Begin-End 区间补充代码,完善函数 get_html(),用 requests.get 请求获取网页信息。

相关知识

为了完成本关任务,你需要掌握:requests 的安装和 requests 的常用方法。

requests 的安装

我们之前介绍了 urllib 库的使用,它是作为爬虫入门工具来介绍的,对新手理解 Python 爬虫的整个流程很有帮助。在掌握了爬虫基本思想流程后,就需要引入更高级的工具来提高我们的开发效率,这里就开始给大家介绍 requests 库的使用。

如果本地 Python 环境没有安装 requests,可以在命令提示符窗口输入命令pip install requests,安装 requests 模块,如下图所示。

预览大图

requests 的常用方法

requests 可以用来模拟浏览器请求,下面介绍实现方法。以 GET 请求为例,实现代码如下所示:

res = requests.get(url, params=params, headers=headers)

参数说明:

  • url :需要抓取的 URL 地址;
  • params : 网址带参请求的方法,字典类型;
  • headers : 请求头。

以百度搜索为例,现在有这样一个网址https://www.baidu.com/s?wd=requests,由主要网址 https://www.baidu.com/s 和参数 wd 组成,需要发起 GET 请求,方法有两种。

方法一:

import requests # 导包
url = 'https://www.baidu.com/s?wd=requests'
header = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/"
"537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"}
response = requests.get(url, headers=header) #模拟 get 请求
response.encoding = 'utf-8' # 指定编码
print(response.text) # 打印网页信息文本

方法二:

import requests # 导包
url = 'https://www.baidu.com/s'
header = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/"
"537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"}
params = {'wd': 'requests'} # 定义参数
response = requests.get(url, params=params, headers=header) #模拟 get 请求
response.encoding = 'utf-8' # 指定编码
print(response.text) # 打印网页信息文本

以上两种方法,都可以得到同一个网页的信息。可以看出,与 urllib 相比,requests 代码更加简洁。

上述代码还用到了响应对象(response)的属性,比如response.encodingresponse.text,响应对象还有一些其它属性:

  • encoding :响应字符编码 res.encoding = ‘utf-8’;
  • text :字符串,网站源码;
  • content :字节流,字符串网站源码;
  • status_code :HTTP 响应码;
  • url :实际数据的 URL 地址。

接下来演示一下 POST 请求,代码同样非常简洁,实现代码如下所示:

res = requests.post(url, data=data, headers=headers)

参数说明:

  • url :需要抓取的 URL 地址;
  • data : 提交常见的 form 表单的方法,字典类型;
  • headers : 请求头。

以豆瓣登录为例,登录网址为https://www.douban.com/,但这只是登录页面网址。为了找到真正的登录网址,需要打开开发者工具,然后在网页上实际进行登录操作,在Network项目下,选中文件basic,可以得到 post 请求的网址为https://accounts.douban.com/j/mobile/login/basic,如下图所示:

预览大图

如果将上图的页面往下拉,可以看到 data 参数为:

,

以下代码演示了模拟登录的 POST 请求:

import requests # 导包# 模拟请求头
header = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/"
"537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"}# 定义 data 信息
data = {
"name": "账号",
"password": "密码",
}url = "https://accounts.douban.com/j/mobile/login/basic"
response = requests.post(url=url, headers=header, data=data) # 模拟登录请求
response.encoding = "utf-8" # 定义编码
html_content = response.text
print(html_content) # 打印网页信息

第一关答案

import requestsdef get_html(url):'''两个参数:param url:统一资源定位符,请求网址:param headers:请求头:return:html'''# ***************** Begin ******************** ## 补充请求头headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/""537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"}# get请求网页response = requests.get(url=url, headers=headers)  # 模拟登录请求response.encoding = "utf-8"  # 定义编码# 获取网页信息文本html = response.text# ***************** End ******************** #return html

第二关:requests 进阶

编程要求

根据提示,在右侧编辑器 Begin-End 区间补充代码,完善函数 get_html(),使用 requests 创建 session 对指定网址发出请求。

相关知识

为了完成本关任务,你需要掌握:cookie 与 session 的使用。

cookie的使用

当你浏览某网站时,Web 服务器会修改修改你电脑上的 Cookies 文件,它是一个非常小的文本文件,可以记录你的用户 ID 、密码、浏览过的网页、停留的时间等信息。 当你再次来到该网站时,网站通过读取 Cookies 文件,得知你的相关信息,从而做出相应的动作,如在页面显示欢迎你的标语,或者让你不用输入 ID、密码就直接登录等等。

下面演示如何在 requests 中使用 Cookies, 以百度搜索为例,在开发者工具查看请求头信息如下:

方法一 将得到的 Cookies 信息写入请求头,模拟 GET 请求:

header = {
'User-Agent': 'Mozilla/5.0 (Linux; Android 8.0.0; Pixel 2 XL Build/OPD1.170816.004) AppleWebKit/'
'537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Mobile Safari/537.36',
"Cookie": "BAIDUID=53B7CC4BFCDC39D2EF625C13D285429D:FG=1; BIDUPSID=53B7CC4BFCDC39D2EF625C13D285429D; "
"PSTM=1591665716; BD_UPN=12314753; BDUSS=2N2ajRYZnI2cVlZN1FRemlWNU9FV1lSZFM3SnZBS0dvRW44WFRCUTRWck1mUVpmR"
"VFBQUFBJCQAAAAAAAAAAAEAAAAoKJzNMTIyMzM4ODQ1uNW41QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAMzw3l7M8N5eS; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; sug=3; sugstore=1; ORIGIN=0; bdime=0; "
"H_PS_PSSID=1456_31672_32139_31253_32046_32230_31708_32295_26350_22160; delPer=0; BD_CK_SAM=1; PSINO=6; "
"H_PS_645EC=3b86vFCd303Aw0wmqvkcAGpfxU4oXfwYcs6jRd1RnxihTsvhfqaVB%2BIoeBs; BDSVRTM=0"
}response = requests.get(url=url, headers=header)

方法二(不推荐) 也可将 cookie 写成字典的形式,传入请求方法中:

cookies = {"BAIDUID": "53B7CC4BFCDC39D2EF625C13D285429D:FG=1", "BIDUPSID": "53B7CC4BFCDC39D2EF625C13D285429D",
"PSTM": "1591665716", "BD_UPN": "12314753", "sug": "3", "sugstore": "1", "ORIGIN": "0", "bdime": "0",
"H_PS_PSSID": "1456_31672_32139_31253_32046_32230_31708_32295_26350_22160", "delPer": "0", " BD_CK_SAM": "1",
"PSINO": "6", "H_PS_645EC": "3b86vFCd303Aw0wmqvkcAGpfxU4oXfwYcs6jRd1RnxihTsvhfqaVB%2BIoeBs", "BDSVRTM": "0",
"BDUSS": "2N2ajRYZnI2cVlZN1FRemlWNU9FV1lSZFM3SnZBS0dvRW44WFRCUTRWck1mUVpmRVFBQUFBJCQ"
"AAAAAAAAAAAEAAAAoKJzNMTIyMzM4ODQ1uNW41QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMzw3l7M8N5eS; BDORZ=B490B5EBF6F3CD402E515D"
"22BCDA1598",
}response = requests.get(url=url, headers=header, cookies=cookies)

session 的使用

http 协议是无状态的,也就是每个请求都是独立的。那么登录后的一系列动作,都需要用 cookie 来验证身份是否是登录状态,为了高效的管理会话,保持会话,于是就有了 session 。 session 是一种管理用户状态和信息的机制,与 cookies 的不同的是,session 的数据是保存在服务器端。说的明白点就是 session 相当于一个虚拟的浏览器,在这个浏览器上处于一种保持登录的状态。

下面演示如何在 requests 中使用 session。 创建会话的代码如下:

sess = requests.session()

使用会话发出请求提交表单的代码如下:

data = {
"name": "XXXXX",
"password": "XXXXX",
}
header = {
'User-Agent': 'Mozilla/5.0 (Linux; Android 8.0.0; Pixel 2 XL Build/OPD1.170816.004) AppleWebKit/'
'537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Mobile Safari/537.36'
}response = sess.post(url, headers=header, data=data)

登录成功后,会话会生成 cookie 以及请求头,再次访问网站,直接发出请求即可,代码如下:

response_home = sess.get(url=url)

第二关答案

import requestsdef get_html(url):'''两个参数:param url:统一资源定位符,请求网址:param headers:请求头:return html 网页的源码:return sess 创建的会话'''# ***************** Begin ******************** ## 补充请求头headers={ 'User-Agent':'Mozilla/5.0 (Linux; Android 8.0.0; Pixel 2 XL Build/OPD1.170816.004) AppleWebKit/''537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Mobile Safari/537.36',"Cookie":"BAIDUID=53B7CC4BFCDC39D2EF625C13D285429D:FG=1; BIDUPSID=53B7CC4BFCDC39D2EF625C13D285429D; ""PSTM=1591665716; BD_UPN=12314753; BDUSS=2N2ajRYZnI2cVlZN1FRemlWNU9FV1lSZFM3SnZBS0dvRW44WFRCUTRWck1mUVpmR""VFBQUFBJCQAAAAAAAAAAAEAAAAoKJzNMTIyMzM4ODQ1uNW41QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA""AAAAAAAAAAAAMzw3l7M8N5eS; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; sug=3; sugstore=1; ORIGIN=0; bdime=0; ""H_PS_PSSID=1456_31672_32139_31253_32046_32230_31708_32295_26350_22160; delPer=0; BD_CK_SAM=1; PSINO=6; ""H_PS_645EC=3b86vFCd303Aw0wmqvkcAGpfxU4oXfwYcs6jRd1RnxihTsvhfqaVB%2BIoeBs; BDSVRTM=0"}# 创建Session, 并使用Session的get请求网页sess = requests.session()# 获取网页信息文本response = sess.get(url,headers=headers)response_home = sess.get(url=url)html=response.text# ****************** End ********************* #return html, sess

在学习中成功、在学习中进步!我们一起学习不放弃~

记得三连哦~ 你们的支持是我最大的动力!!欢迎大家阅读往期文章哈~

小编联系方式如下,欢迎各位巨佬沟通交流,代码什么的加小编私聊哦~

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

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

相关文章

Spring Boot freemarker导出word下载

freemarker详解 FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序…

学生用计算机怎么累加,计算机一级OFFICE辅导:累加小技巧

我们在工作中常常需要在已有数值的单元格中再增加或减去另一个数。一般是在计算器中计算后再覆盖原有的数据。这样操作起来很不方便。考试大编辑推荐一个小技巧,可以有效地简化老式的工作过程。(1).创建一个宏:选择Excel选单下的“工具→宏→录制新宏”选…

不同进制之间的转化

将二进制、八进制、十六进制转换为十进制 二进制、八进制和十六进制向十进制转换都非常容易,就是“按权相加”。所谓“权”,也即“位权”。 假设当前数字是 N 进制,那么: 对于整数部分,从右往左看,第 i 位…

[刨根问底] 五分钟搞懂组合评价模型—模糊Borda (以2021 年大学生数模国赛C题为例)

组合评价模型—模糊Borda(Matlab) 我们的征途是星辰大海,而并非烟尘人间。 目录 组合评价模型—模糊Borda(Matlab) 一、模糊Borda法简介 二、模糊Borda法主要步骤 (1)计算隶属度 (2)计算模糊频数 (…

计算机桌面右键新建展不开,Win10右键新建不见了怎么办?Win10电脑桌面右键新建没有了解决方法...

近期有Win10用户遇到一个问题,也就是电脑桌面右键新建没有了,比如想要创建一个文本文档、文件夹、Word,没有新建功能无法创建,那么Win10右键新建不见了怎么办?下面装机之家分享一下Win10电脑桌面右键新建没有了解决方法…

最常用的客观赋权方法——熵权法

我们的征途是星辰大海,而并非烟尘人间。 文章目录 一、熵权法的原理 1.1 信息熵 1.2 熵权法 二、熵权法的主要步骤 2.1 数据标准化 2.2 求各指标在各方案下的比值 2.3 求各指标的信息熵。 2.4 确定各指标的权重 2.4.1 通过信息熵计算各指标的权重&#…

2017韩老师计算机网络,2017年计算机等考三级网络技术辅导:计算机网络拓扑结构...

1.计算机网络拓扑的定义计算机网络设计的第一步就是网络拓扑设计。拓扑学是几何学的一个分支。计算机网络拓扑是通过网中结点与通信线路之间的几何关系表示网络结构,反映出网络各实体之间的结构关系。2.网络拓扑的分类网络拓扑可以根据通信子…

Spring Boot html页面解析之jsoup

目的 我们要对一个页面进行数据抓取,并导出doc文档 html解析器 jsoup 直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于JQuery的操作方法来取出和操作数据。 htmlparser 提供了线性和嵌套两种方…

2021年五一杯数学建模A题(疫苗生产调度问题)详细分析

目录 一、基本介绍 1.1 题目描述 1.2 待解决问题 二、问题分析与求解 2.1 问题一分析与求解 2.2 问题二分析与求解 2.3 问题三分析与求解 2.4 问题四分析与求解 2.5 问题五分析与求解 三、完整代码 四、总结 一、基本介绍 1.1 题目描述 新冠肺炎肆虐全球&#xff0…

Spring Boot EasyPoi导出Excel下载

Java关于excel的操作 Java Excel俗称jxl,可以读取Excel文件的内容、创建新的Excel文件、更新已经存在的Excel文件,现在基本没有更新了 Apache POI是Apache基金组织Jakarta项目的子项目,它包括一系列的API,可以操作多种格式的Mic…

2021年华中杯A题(马赛克瓷砖选色问题)详细分析

目录 一、基本介绍 1.1 题目描述 1.2 待解决问题 二、问题分析与求解 2.1 问题一分析与求解 2.2 问题二分析与求解 2.3 问题三分析与求解 三、完整代码 四、总结 一、基本介绍 1.1 题目描述 马赛克瓷砖是一种尺寸较小(常见规格为边长不超过 5cm&#xff09…

计算机无法连接无线信号,win7系统连接无线信号时提示Windows无法连接到路由器名称的四种解决方法...

现如今网络发展速度非常快,无线网络已经普及了,使用率高了遇到的问题也就多了。比如有时候笔记本win7系统连接无线信号时出现“Windows无法连接到路由器名称”(如下图所示),该如何解决此问题呢?下面脚本之家的小编介绍几种解决方法…

数据采集与清洗基础习题(四)Pandas初体验,头歌参考答案

数据采集习题参考答案,会持续更新,点个关注防丢失。 创作不易,一键三连给博主一个支持呗。 为了方便查找,已按照头歌重新排版,朋友们按照头歌所属门类查找实训哦,该篇为Pandas。 文章目录 实训一&#…

全国计算机准考证打印2015年,甘肃2015下半年全国计算机等级考试准考证打印时间...

甘肃2015下半年全国计算机等级考试准考证打印时间一、打印准考证考生可在考前2周之内登陆全省统一报名网站自主打印准考证,或到考点现场领取准考证。二、考试时间下半年:2015年9月19日至21日,分批进行。考试具体时间、地点均以“准考证”为准…

TOPSIS与模糊Borda 的组合应用(以第二届大湾区杯和国赛为案例)

目录 一、TOPSIS(优劣解距离法)简介 二、TOPSIS(优劣解距离法)主要步骤 (1)数据进行标准化 (2)构建决策矩阵 (3)构造加权规范阵 (4&#xf…

Spring Boot 页面国际化

internationalization详解 国际化(internationalization)是设计和制造容易适应不同区域要求的产品的一种方式。它要求从产品中抽离所有地域语言,国家/地区和文化相关的元素。换言之,应用程序的功能和代码设计考虑在不同地区运行的…

唯美计算机语言,唯美精辟的语句

1、当泪水一滴滴的掉落在我的手上,那时竟想为何我非你不可!2、原来再美好的承诺,最终还是会被现实打败。3、明明不是陌生人,却装的,比陌生人,还要陌生。4、如果我是个瘦子,伤心时我还可以数数排…

不到30的成本,还不赶紧造起来——盘点软著申请小知识

今年上半年的时候跟着老师做项目,为了学习应付中期报告,就自己写了一个小软件,然后申请了一个软著,至于为啥要头铁的自己上呢,因为想要拿独立著作权,那当然是没有报销的啦~,这里有同学就要问啦&…

Linux系统安装及配置——Centos-7-X86_64-DVD-2009

目录 1.下载 VMware Workstation软件 2.下载 Centos-7-X86_64-DVD-2009.iso 3.安装并配置 3.1打开VMware Workstation,选择创建新的虚拟机 3.2选择自定义,然后下一步 3.3下一步 3.4选择稍后安装操作系统,然后下一步 3.5选择Linux&am…

2018年12月份计算机,CPU天梯图2018年12月最新版 十二月台式电脑CPU性能排行

Helio,大家好,11月再见12月你好!欢迎关注IT数码通带来的最新一期桌面CPU天梯图。距离上一次天梯图更新已经过去一个月时间了,伴随着12月份到来,新的天梯图需要进行更新和完善了。接下来“IT数码通”小编为大家带来了CP…