头歌答案--爬虫实战

目录

urllib 爬虫?

第1关:urllib基础

任务描述

第2关:urllib进阶?

任务描述

requests 爬虫

第1关:requests 基础

任务描述

第2关:requests 进阶

任务描述

网页数据解析

第1关:XPath解析网页?

任务描述

第2关:BeautifulSoup解析网页?

任务描述

JSON数据解析

第1关:JSON解析?

任务描述

爬虫实战——网页抓取及信息提取

第1关:利用URL获取超文本文件并保存至本地?

任务描述

第2关:提取子链接?

任务描述

第3关:网页数据分析?

任务描述


urllib 爬虫

第1关:urllib基础
任务描述

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

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

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

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 爬虫

第1关:requests 基础
任务描述

本关任务:编写一个 requests 请求网页的程序。

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
第2关:requests 进阶
任务描述

本关任务:使用 session 编写爬取网页的小程序。

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

网页数据解析

第1关:XPath解析网页
任务描述

本关任务:在 XPath 基础实训中,介绍了 XPath 的基础知识,本关需要使用 XPath 技术来编写解析网页的程序。

import urllib.requestfrom lxml import etreedef get_data(url):''':param url: 请求地址:return: None'''response=urllib.request.urlopen(url=url)html=response.read().decode("utf-8")# *************** Begin *************** #parse = etree.HTML(html)  # 写入xpath路径  item_list = parse.xpath("//div[@class='left']/ul/li/span/a/text()")   #item_list = parse.xpath("/html/body/div[2]/div[1]/ul/li/span/a.text()")   # *************** End ***************** #print(item_list)
第2关:BeautifulSoup解析网页
任务描述

本关任务:使用 BeautifulSoup 解析网页爬取古诗词的内容部分。

import requests
from bs4 import BeautifulSoup
def get_data(url, headers):'''两个参数:param url:统一资源定位符,请求网址:param headers:请求头:return data:list类型的所有古诗内容'''# ***************** Begin ******************** #response = requests.get(url, headers=headers)  response.encoding = "utf-8"  html = response.text  soup = BeautifulSoup(html, 'lxml')  data = soup.find('div', {'class': 'left'}).ul.find_all('li')  data = [i.p.text for i in data]# ****************** end ********************* #return data

JSON数据解析

第1关:JSON解析
任务描述

本关任务:编写一个能用 JSON 解析爬虫数据的小程序。

import urllib.request
from lxml import etree
import http.cookiejar
import jsondef request_sess(url,headers):cj=http.cookiejar.CookieJar()opener=urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj))request = urllib.request.Request(url=url, headers=headers)r=opener.open(fullurl=request)html = r.read().decode('utf-8')return htmldef save_data(path):''':param path: 文件保存路径:return: 无'''url='http://127.0.0.1:8080/index'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'}# ********** Begin ************** #json_str = request_sess(url,headers)# 输出 JSON 数据中的 key 值为 code 对应的数据b = json.loads(json_str)print(b['code'])# 将爬取下来的 JSON 数据保存到本地with open(path,'w') as f:json.dump(b,f)# ********** End ************** #

爬虫实战——网页抓取及信息提取

第1关:利用URL获取超文本文件并保存至本地
任务描述

当我们想要在浏览器中打开一个网页时,需要在浏览器的地址栏中输入该网页的url,例如在地址栏中输入百度搜索网站的首页url:百度一下,你就知道 ,点击确认后,浏览器将向服务器发出一个对该网的请求;服务器端收到请求后,会返回该网页的超文本文件,浏览器收到服务器端发来的网页超文本文件后,对其进行解析,然后在窗口中显示该超文本文件对应的网页。如下图所示。

# -*- coding: utf-8 -*-
import urllib.request as req
import os
import hashlib# 国防科技大学本科招生信息网中录取分数网页URL:
url = 'https://www.nudt.edu.cn/bkzs/xxgk/lqfs/index.htm'  # 录取分数网页URLdef step1():
# 请按下面的注释提示添加代码,完成相应功能
#********** Begin *********#
# 1.将网页内容保存到datax = req.urlopen(url)date = x.read()# 2.将data以二进制写模式写入以学号命名的 “nudt.txt” 文件:with open('nudt.txt','wb') as f:f.write(date)#********** End **********#
第2关:提取子链接
任务描述

上一关我们学习了如何访问给定的网页并保存信息到本地,本关我们要从上一关访问的网页中提取出嵌套的url地址,即实现子链接的提取。

# -*- coding: utf-8 -*-
import urllib.request as req
# 国防科技大学本科招生信息网中录取分数网页URL:
url = 'https://www.nudt.edu.cn/bkzs/xxgk/lqfs/index.htm'  # 录取分数网页URL
webpage = req.urlopen(url)  # 按照类文件的方式打开网页
data = webpage.read()       # 一次性读取网页的所有数据
data = data.decode('utf-8')  # 将byte类型的data解码为字符串(否则后面查找就要另外处理了)def step2():# 建立空列表urls,来保存子网页的urlurls = []# 请按下面的注释提示添加代码,完成相应功能
#********** Begin *********#
# 从data中提取2014到2021每一年分数线子网站地址添加到urls列表中for i in range(2014,2021+1):string = f"{i}年录取分数统计"index = data.find(string)urls.insert(0,'https://www.nudt.edu.cn/bkzs/xxgk/lqfs/'+'"'+data[index-133:index-133+36])# #********** End **********#return urls
第3关:网页数据分析
任务描述

下图是2016年国防科技大学分数线的网页,在浏览器中我们可以看到,各省的最高分、最低分、平均分都整齐地排列自在表格中。一个网页的源代码时常有成百上千行,其中很多代码都是为了布局页面样式服务的,而我们时常关心的是网页上的数据,而并不关心样式代码。所以如何从冗长的网页源代码中提取我们关心的数据,是这一关我们将要一起学习和体验的内容。

# -*- coding: utf-8 -*-
import urllib.request as req
import re# 国防科技大学本科招生信息网中2016年录取分数网页URL:
url = 'https://www.nudt.edu.cn/bkzs/xxgk/lqfs/6a4ee15ca795454083ed233f502b262b.htm'webpage = req.urlopen(url)      # 根据超链访问链接的网页
data = webpage.read()           # 读取超链网页数据
data = data.decode('utf-8')     # byte类型解码为字符串# 获取网页中的第一个表格中所有内容:
table = re.findall(r'<table(.*?)</table>', data, re.S)
firsttable = table[0]           # 取网页中的第一个表格
# 数据清洗,将表中的&nbsp, ,和空格号去掉
firsttable = firsttable.replace('&nbsp;', '')
firsttable = firsttable.replace(' ', '')
firsttable = firsttable.replace(' ', '')def step3():score = []
# 请按下面的注释提示添加代码,完成相应功能,若要查看详细html代码,可在浏览器中打开url,查看页面源代码。
#********** Begin *********#
# 1.按tr标签对获取表格中所有行,保存在列表rows中:rows = re.findall(r'<tr(.*?)</tr>', firsttable, re.S)# 2.迭代rows中的所有元素,获取每一行的td标签内的数据,并把数据组成item列表,将每一个item添加到scorelist列表:count = 0for i in rows:count += 1if count == 1 or count == 2:continueitem = []tds = re.findall(r'<td(.*?)</td>', i, re.S)count2 = 0for j in tds:count2 += 1p = re.findall(r'<p(.*?)</p>', j, re.S)if count2 == 1:sf = re.search(r'[一-龥]+', p[0]).group(0)item.append(sf)elif count2 == 8:breakelse:try:fs = re.search(r'[1-9]d*', p[0]).group(0)item.append(fs)except:item.append('/')# 3.将由省份,分数组成的8元列表(分数不存在的用/代替)作为元素保存到新列表score中,不要保存多余信息score.append(item)#********** End **********#return score

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

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

相关文章

【JavaEE】Spring Web MVC

目录 一、Spring Web MVC简介 1.1 MVC简介1.2 Spring MVC1.3 RequestMapping注解1.3.1 使用1.3.2 RequestMapping的请求设置 1.3.2.1 方法11.3.2.2 方法2 二、Postman介绍 2.1 创建请求2.2 界面如下&#xff1a;2.3 传参介绍 一、Spring Web MVC简介 官方文档介绍&#xff…

Sqlmap入门

原理 在owasp发布的top10 漏洞里面&#xff0c;注入漏洞一直是危害排名第一&#xff0c;其中数据库注入漏洞是危害的。 当攻击者发送的sql语句被sql解释器执行&#xff0c;通过执行这些恶意语句欺骗数据库执行&#xff0c;导致数据库信息泄漏 分类 按注入类型 常见的sql注入…

RabbitMQ基础篇

文章目录 1 RabbitMQ概述1.1 消息队列1.2 RabbitMQ体系结构 2 RabbitMQ工作模式2.1 简单模式&#xff08;Simple Queue&#xff09;2.2 工作队列模式&#xff08;Work Queues&#xff09;2.3 发布/订阅模式&#xff08;Publish/Subscribe&#xff09;2.4 路由模式&#xff08;R…

javaEE初阶————多线程初阶(2)

今天给大家带来第二期啦&#xff0c;保证给大家讲懂嗷&#xff1b; 1&#xff0c;线程状态 NEW安排了工作还未开始行动RUNNABLE可工作的&#xff0c;或者即将工作&#xff0c;正在工作BLOCKED排队等待WAITING排队等待其他事TIMED_WAITING排队等待其他事TERMINATED工作完成了 …

于灵动的变量变幻间:函数与计算逻辑的浪漫交织(下)

大家好啊&#xff0c;我是小象٩(๑ω๑)۶ 我的博客&#xff1a;Xiao Xiangζั͡ޓއއ 很高兴见到大家&#xff0c;希望能够和大家一起交流学习&#xff0c;共同进步。 这一节我们主要来学习单个函数的声明与定义&#xff0c;static和extern… 这里写目录标题 一、单个函数…

【数据分析】02- A/B 测试:玩转假设检验、t 检验与卡方检验

一、背景&#xff1a;当“审判”成为科学 1.1 虚拟场景——法庭审判 想象这样一个场景&#xff1a;有一天&#xff0c;你在王国里担任“首席审判官”。你面前站着一位嫌疑人&#xff0c;有人指控他说“偷了国王珍贵的金冠”。但究竟是他干的&#xff0c;还是他是被冤枉的&…

HTML应用指南:利用GET请求获取全国特斯拉充电桩位置

随着电动汽车的普及&#xff0c;充电基础设施的建设变得至关重要。作为电动汽车领域的先驱&#xff0c;特斯拉不仅在车辆技术创新上持续领先&#xff0c;还积极构建广泛的充电网络&#xff0c;以支持其不断增长的用户群体。为了提升用户体验和服务质量&#xff0c;开发人员和数…

【原创】大数据治理入门(2)《提升数据质量:质量评估与改进策略》入门必看 高赞实用

提升数据质量&#xff1a;质量评估与改进策略 引言&#xff1a;数据质量的概念 在大数据时代&#xff0c;数据的质量直接影响到数据分析的准确性和可靠性。数据质量是指数据在多大程度上能够满足其预定用途&#xff0c;确保数据的准确性、完整性、一致性和及时性是数据质量的…

OpenVela——专为AIoT领域打造的开源操作系统

目录 一、系统背景与开源 1.1. 起源 1.2. 开源 二、系统特点 2.1. 轻量化 2.2. 标准兼容性 2.3. 安全性 2.4. 高度可扩展性 三、技术支持与功能 3.1. 架构支持 3.2. 异构计算支持 3.3. 全面的连接套件 3.4. 开发者工具 四、应用场景与优势 4.1. 应用场景 4.2. …

寒假1.18

web&#xff08;报错注入&#xff09; [第一章 web入门]SQL注入-2 题解&#xff1a; 打开是个403界面&#xff0c;还以为没开成 通过题目提示&#xff0c;访问/login.php /user.php 合在一起访问屁都没有&#xff0c;分开访问&#xff0c;/login.php回显&#xff1a; /user.p…

如何通过 Apache Airflow 将数据导入 Elasticsearch

作者&#xff1a;来自 Elastic Andre Luiz 了解如何通过 Apache Airflow 将数据导入 Elasticsearch。 Apache Airflow Apache Airflow 是一个旨在创建、安排&#xff08;schedule&#xff09;和监控工作流的平台。它用于编排 ETL&#xff08;Extract-Transform-Load&#xff0…

企业分类相似度筛选实战:基于规则与向量方法的对比分析

文章目录 企业表相似类别筛选实战项目背景介绍效果展示基于规则的效果基于向量相似的效果 说明相关文章推荐 企业表相似类别筛选实战 项目背景 在当下RAG&#xff08;检索增强生成&#xff09;技术应用不断发展的背景下&#xff0c;掌握文本相似算法不仅能够助力信息检索&…

Jenkins-Pipeline简述

一. 什么是Jenkins pipeline&#xff1a; pipeline在jenkins中是一套插件&#xff0c;主要功能在于&#xff0c;将原本独立运行于单个或者多个节点的任务连接起来&#xff0c;实现单个任务难以完成的复杂发布流程。Pipeline的实现方式是一套Groovy DSL&#xff0c;任何发布流程…

基于海思soc的智能产品开发(高、中、低soc、以及和fpga的搭配)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 市场上关于图像、音频的soc其实非常多&#xff0c;这里面有高、中、低档&#xff0c;开发方式也不相同。之所以会这样&#xff0c;有价格的因素&am…

C# 修改项目类型 应用程序程序改类库

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 源码指引&#xff1a;github源…

6、原来可以这样理解C语言_函数(1/8)函数的概念

目录 一、函数的概念 一、函数的概念 数学中我们其实就⻅过函数的概念&#xff0c;⽐如&#xff1a;⼀次函数 ykxb &#xff0c;k和b都是常数&#xff0c;给⼀个任意的x&#xff0c;就 得到⼀个y值。 其实在C语⾔也引⼊函数&#xff08;function&#xff09;的概念&#xff0c…

Excel 技巧10 - 如何检查输入重复数据(★★)

本文讲了如何在Excel中通过COUNTIF来检查输入重复数据。 当输入重复数据时&#xff0c;显示错误提示。 1&#xff0c;通过COUNTIF来检查输入重复数据 比如下面是想检查不要输入重复的学号。 选中C列&#xff0c;点 Menu > 数据 > 数据验证 在数据验证页面&#xff0c…

【Linux系统】Ext系列磁盘文件系统二:引入文件系统(续篇)

inode 和 block 的映射 该博文中有详细解释&#xff1a;【Linux系统】inode 和 block 的映射原理 目录与文件名 这里有几个问题&#xff1a; 问题一&#xff1a; 我们访问文件&#xff0c;都是用的文件名&#xff0c;没用过 inode 号啊&#xff1f; 之前总是说可以通过一个…

[计算机网络]一. 计算机网络概论第一部分

作者申明&#xff1a;作者所有文章借助了各个渠道的图片视频以及资料&#xff0c;在此致谢。作者所有文章不用于盈利&#xff0c;只是用于个人学习。 1.0推荐动画 【网络】半小时看懂<计算机网络>_哔哩哔哩_bilibili 1.1计算机网络在信息时代的作用 在当今信息时代&…

Python操作Excel——openpyxl使用笔记(2)

2. 操作工作表 前面提到一个工作簿中会有一个或者多个工作表&#xff0c;当前使用的工作表被称作活动工作表&#xff0c;这里展开介绍一下对于工作表的一些操作。 2.1 枚举所有工作表 使用for循环可以很方便的遍历每个工作表&#xff1a; import openpyxl wb openpyxl.o…