小工具知识网

当前位置: 首页 > 行业知识 > 头歌答案--爬虫实战

行业知识

头歌答案--爬虫实战

2026-11-01 00:00:48 来源:互联网转载

目录

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.requestdef 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.requestimport http.cookiejardef 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("//p[@class='left']/ul/li/span/a/text()")       #item_list = parse.xpath("/html/body/p[2]/p[1]/ul/li/span/a.text()")       # *************** End ***************** #     print(item_list)

第2关:BeautifulSoup解析网页 

任务描述

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

import requestsfrom bs4 import BeautifulSoupdef 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('p', {'class': 'left'}).ul.find_all('li')      data = [i.p.text for i in data]    # ****************** end ********************* #    return data

JSON数据解析

第1关:JSON解析 

任务描述

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

import urllib.requestfrom lxml import etreeimport http.cookiejarimport 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 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 reqimport osimport hashlib # 国防科技大学本科招生信息网中录取分数网页URL:url = 'https://www.nudt.edu.cn/bkzs/xxgk/lqfs/index.htm'  # 录取分数网页URL  def step1():# 请按下面的注释提示添加代码,完成相应功能#********** Begin *********## 1.将网页内容保存到data    x = 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'  # 录取分数网页URLwebpage = req.urlopen(url)  # 按照类文件的方式打开网页data = webpage.read()       # 一次性读取网页的所有数据data = data.decode('utf-8')  # 将byte类型的data解码为字符串(否则后面查找就要另外处理了) def step2():    # 建立空列表urls,来保存子网页的url    urls = [] # 请按下面的注释提示添加代码,完成相应功能#********** 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 reqimport 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'

上一篇:linux服务器怎么搭?

下一篇:PubChem数据轻松获取指南!