当前位置: 首页 > news >正文

完整教程:头歌答案--爬虫实战

完整教程:头歌答案--爬虫实战

目录

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 requests
def 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 requests
def 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.request
from lxml import etree
def 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.textsoup = 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 json
def 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 html
def 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'  # 录取分数网页URL
def 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'', data, re.S)
firsttable = table[0]           # 取网页中的第一个表格
# 数据清洗,将表中的 , ,和空格号去掉
firsttable = firsttable.replace(' ', '')
firsttable = firsttable.replace(' ', '')
firsttable = firsttable.replace(' ', '')
def step3():score = []
# 请按下面的注释提示添加代码,完成相应功能,若要查看详细html代码,可在浏览器中打开url,查看页面源代码。
#********** Begin *********#
# 1.按tr标签对获取表格中所有行,保存在列表rows中:rows = re.findall(r'', 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'', i, re.S)count2 = 0for j in tds:count2 += 1p = re.findall(r'', 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.jsqmd.com/news/82941/

相关文章:

  • 黑客大神都会玩这 10 个 Linux 命令,我不允许你还不知道!
  • 2025年普刊发表服务公司排名:南京评职称/兰州评职称发表普 - 工业品牌热点
  • 基于SpringBoot的人力资源管理系统(毕业设计项目源码+文档)
  • 断言那些事儿:单测只需要一个断言?
  • 2025年交通事故认定专业律所推荐:帮你厘清责任划分,维护合 - myqiye
  • Codex 相较其他模型的核心优势(含 Polocode 集成场景) - poloai
  • 基于SpringBoot+Vue的高校志愿活动管理系统的设计与实现(毕业设计项目源码+文档)
  • 轻量级AI模型高并发应用实战:5大核心技巧深度解析
  • 国内geo优化服务商深度测评:服务能力、性价比与客户口碑对比 - 品牌推荐官优选
  • 掌握波利亚解题法:提升问题解决能力的终极指南
  • 年末定制衣柜哪个好?分析好莱客:环保、品质与未来三大硬核 - 速递信息
  • 小米的奇幻编程之旅:当 JavaScript 语法变成了一座魔法城
  • 从ToDetect看浏览器指纹检测平台的优劣与选择技巧
  • LFM2-8B-A1B:边缘AI新标杆,8.3B参数MoE模型重塑移动终端智能体验
  • 基于springboot+vue的社区资源共享系统设计与实现(毕业设计项目源码+文档)
  • 场地清扫机与沥青道路清洁车在各类场所的应用价值分析
  • 基于微信小程序的校园二手交易平台系统(毕业设计项目源码+文档)
  • 基于SpringBoot+Vue技术的二手车交易管理系统的设计与实现(毕业设计项目源码+文档)
  • 在Anaconda中指定Jupyter Notebook虚拟环境和工作目录
  • 基于SpringBoot+Vue技术的医疗器械管理系统设计与实现(毕业设计项目源码+文档)
  • 《Python学习手册》第2章 Python如何运行程序
  • text-to-svg:文本转SVG路径的终极神器
  • Harbor 镜像仓库核心技术详解(适配 K8S 1.33)
  • 2025土壤墒情监测设备选型全攻略:金叶智能应用分享
  • iOS动画开发终极指南:用lottie-ios组件库打造高性能可复用动画
  • HarmonyOS模块配置终极指南:5步快速掌握module.json5核心技巧
  • 如何快速提升Open GApps构建性能:缓存清理与加速技巧详解
  • 2025年12月德国list涂层测厚仪哪家公司可定制?供应商/优秀企业/知名企业推荐 - 品牌推荐大师1
  • Cursor助力Java开发,零基础入门到精通,收藏这篇就够了
  • OSI七层协议、TCP三次握手四次挥手