头歌答案--爬虫实战

目录

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,\u3000,和空格号去掉
firsttable = firsttable.replace('&nbsp;', '')
firsttable = firsttable.replace('\u3000', '')
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'[\u4e00-\u9fa5]+', 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.mzph.cn/news/140860.shtml

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

相关文章

通过 Elasticsearch 和 Go 使用混合搜索进行地鼠狩猎

作者&#xff1a;CARLY RICHMOND&#xff0c;LAURENT SAINT-FLIX 就像动物和编程语言一样&#xff0c;搜索也经历了不同实践的演变&#xff0c;很难在其中做出选择。 在本系列的最后一篇博客中&#xff0c;Carly Richmond 和 Laurent Saint-Flix 将关键字搜索和向量搜索结合起…

Hafnium之准虚拟化接口

安全之安全(security)博客目录导读 目录 一、HF_INTERRUPT_ENABLE 二、HF_INTERRUPT_GET 三、HF_INTERRUPT_DEACTIVATE 四、HF_INTERRUPT_RECONFIGURE Hafnium

基于Python实现,调用百度通用翻译API-详解

概述 在工作上需要各个国家语言的翻译方面很多地方用的上。 获取API权限: 登录百度账号,在个人信息界面,包括修改密码、绑定手机、身份人证等 https://api.fanyi.baidu.com/api/trans/product/desktop?req=developer 百度翻译开放平台 在开发者中心:需要开通个人账号…

redis之org.springframework.data.redis.RedisSystemException: Error in execution

背景 在运行某系统时&#xff0c;在测试类向redis中存入某值&#xff0c;然后取出。 一、遇到的问题 报错&#xff1a; org.springframework.data.redis.RedisSystemException: Error in execution; nested exception is io.lettuce.core.RedisCommandExecutionException: …

【算法练习Day47】两个字符串的删除操作编辑距离

​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;练题 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 文章目录 两个字符串的删除操作编辑距…

Vue的计算属性

Vue的计算属性&#xff0c;是一种架构设计中的权衡结果。现在的前端架构&#xff0c;上规模的都是类似于MVVM风格的。在这种架构下&#xff0c;会存在一种情况&#xff0c;从后台取回的数据不能直接展示&#xff0c;需要满足一定条件时做一些临时性的转换&#xff0c;将原本的数…

3个ui自动化测试痛点

当我们找工作的时候查看招聘信息发现都需要有自动化测试经验&#xff0c;由此看来测试人员不会一点自动化测试技术都不好意思说自己是做软件测试的。大部分测试人员也都是从使用自动化测试工具、录制回放、测试脚本、开发小工具入门自动化测试的&#xff0c;然后在慢慢的接触 U…

找工作的网站都有哪些

吉鹿力招聘网作为一家知名的招聘网站&#xff0c;因其功能完善和用户隐私保护而备受用户青睐。它不仅可以与企业直接沟通&#xff0c;还可以提供在线聊工作的机会。通过吉鹿力招聘网&#xff0c;用户可以自主选择工作地点、时间和工作类型&#xff0c;大大提高了找到合适工作的…

基于JavaWeb+SSM+基于微信小程序的“生鲜食品”团购平台生鲜商城系统的设计和实现

基于JavaWebSSM基于微信小程序的“生鲜食品”团购平台生鲜商城系统的设计和实现 源码获取入口前言主要技术系统设计功能截图Lun文目录订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 前言 生鲜食品是我们生活中的必需品&#xff0c;为了确保食品的新鲜…

Azure 机器学习 - 使用受保护工作区时的网络流量流

目录 环境准备入站和出站要求方案&#xff1a;从工作室访问工作区方案&#xff1a;从工作室使用 AutoML、设计器、数据集和数据存储方案&#xff1a;使用计算实例和计算群集方案&#xff1a;使用联机终结点入站通信出站通信 方案&#xff1a;使用 Azure Kubernetes 服务方案&am…

个人开发常用idea插件

idea重装后必须要配置的几项&#xff1a; Maven&#xff1a; File-->Settings-->Maven字体&#xff1a; IDE字体设置&#xff1a;File-->Settings-->Appearance&#xff0c;设置成Consolas&#xff0c;Size&#xff1a;18代码字体设置&#xff1a;File-->Setti…

Django知识点

目录 一、三板斧的使用 二、全局配置文件 三、静态文件的设置 四、request对象的方法 五、pycharm链接数据库 六、Django链接数据库 七、orm介绍 一、三板斧的使用 三个方法&#xff1a; HttpResponse renderredirect def index(request):print(request)return HttpR…

lightdb oracle模式支持sys_refcursor类型

背景 在业务产品中&#xff0c;存在Oracle移植过来的函数以及存储过程。它们把sys_refcursor作为参数的类型。 LightDB 23.4版本对此进行了支持。 示例 准备环境 create database test_oracle with lightdb_syntax_compatible_type oracle; \c test_oracle准备数据 crea…

云计算、大数据技术的智慧工地,实现对建筑工地实时监测、管理和控制的一种新型建筑管理方式

智慧工地是利用物联网、云计算、大数据等技术&#xff0c;实现对建筑工地实时监测、管理和控制的一种新型建筑管理方式。 智慧工地架构&#xff1a; 1、终端层&#xff1a; 充分利用物联网技术、移动应用、智能硬件设备提高现场管控能力。通过RFID、传感器、摄像头、手机等终…

Mongodb 中,与索引相关的监控指标

Mongodb为集合添加索引&#xff0c;能够提高查询的效率&#xff0c;减少查询过程中检索文档的数量&#xff0c;改变文档检索的方式。 索引&#xff0c;采用集合中的一部分数据&#xff0c;构建了B tree&#xff0c;支持mongodb的高效检索。除$indexStats命令外&#xff0c;mong…

RK3568平台开发系列讲解(Linux系统篇)Linux 目录结构

🚀返回专栏总目录 文章目录 一、VFS二、分区结构三、挂载 mount四、目录结构沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇我们从目录管理入手,会更直观的理解 linux 的目录结构。 一、VFS Linux 所有的文件都建立在虚拟文件系统(Virtual File System ,VFS…

【LittleXi】C程序预处理、编译、汇编、链接步骤

【LittleXi】C程序预处理、编译、汇编、链接步骤 C程序 #include<stdio.h> int main(){int x1,y1;printf("xy%d",xy); }1、预处理 将头文件引入进来、除去注释、宏定义下放 执行指令 g -E esc.c -o esc.i 2、编译 将处理好的代码编译为汇编代码.s 执行…

移动端性能专项测试之内存 - 进阶篇

在 Android 系统中内存作为重要的资源&#xff0c;一直是开发及测试关注的重点&#xff0c;内存不足或者内存资源滥用都会导致严重的问题。本篇文章将会从底层出发给大家介绍 OOM&#xff08;Out Of Memory&#xff09;和 LMK&#xff08;Low Memory Killer&#xff09;等内存相…

c++-哈希

文章目录 前言一、unordered系列关联式容器1、unordered_map2、性能测试 二、哈希1、哈希概念2、哈希冲突3、哈希冲突解决3.1 闭散列3.2 开散列3.3 字符串Hash函数3.4 哈希桶实现的哈希表的效率 三、哈希表封装unordered_map和unordered_set容器1、unordered_map和unordered_se…

Git Commit 之道:规范化 Commit Message 写作指南

1 commit message 规范 commit message格式都包括三部分&#xff1a;Header&#xff0c;Body和Footer <type>(<scope>): <subject><body><footer>Header是必需的&#xff0c;Body和Footer则可以省略 1.1 Header Type&#xff08;必需&#xf…