头歌答案--爬虫实战

news2025/1/11 7:00:42

目录

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.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 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.将网页内容保存到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'  # 录取分数网页URL
webpage = 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 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 = 0
    for i in rows:
        count += 1
        if count == 1 or count == 2:
            continue
        item = []
        tds = re.findall(r'<td(.*?)</td>', i, re.S)
        count2 = 0
        for j in tds:
            count2 += 1
            p = 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:
                break
            else:
                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.coloradmin.cn/o/1198960.html

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

相关文章

算法导论6:摊还分析,显式与隐式

P258 摊还分析概念 聚合分析&#xff0c;利用它&#xff0c;我们证明对于n&#xff0c;一个n个操作的序列最坏情况下的花费的总时间为T(n)&#xff0c;因此&#xff0c;在最坏情况下&#xff0c;每个操作的平均代价&#xff08;摊还代价&#xff09;为T(n)/n 举了例子来形容这…

asp.net 在线音乐网站系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net 在线音乐网站系统是一套完善的web设计管理系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库为sqlserver2008&#xff0c;使用c#语言 开发 asp.net 在线音乐网站系统1 应用…

pyorch Hub 系列#4:PGAN — GAN 模型

一、主题描述 2014 年生成对抗网络的诞生及其对任意数据分布进行有效建模的能力席卷了计算机视觉界。两人范例的简单性和推理时令人惊讶的快速样本生成是使 GAN 成为现实世界中实际应用的理想选择的两个主要因素。 然而&#xff0c;在它们出现后的很长一段时间内&#xff0c;GA…

Clickhouse学习笔记(8)—— 建表优化

数据类型 时间字段 建表时能用数值型或日期时间类型&#xff08;DateTime&#xff09;表示的字段就不要用字符串 因为clickhouse进行分区时一般使用时间字段来进行分区&#xff0c;而将时间字段使用DateTime表示&#xff0c;不需要经过函数转换处理&#xff0c;执行效率高、…

开放领域问答机器人2——开发流程和方案

开放领域问答机器人是指在任何领域都能够回答用户提问的智能机器人。与特定领域问答机器人不同&#xff0c;开放领域问答机器人需要具备更广泛的知识和更灵活的语义理解能力&#xff0c;以便能够回答各种不同类型的问题。 开发开放领域问答机器人的流程和方案可以包括以下步骤…

【视觉SLAM十四讲学习笔记】第二讲——初识SLAM

专栏系列文章如下&#xff1a; 【视觉SLAM十四讲学习笔记】第一讲 一个机器人&#xff0c;如果想要探索某一块区域&#xff0c;它至少需要知道两件事&#xff1a; 我在什么地方——定位周围环境是什么样——建图 一方面需要明白自身的状态&#xff08;即位置&#xff09;&#…

最详细ChatGPT+AI绘画+企业知识库+视频去水印系统源码搭建流程,手把手教你搭建

一、系统介绍 这款源码搭载了强大的AI问答功能&#xff0c;是基于目前最强大AI大语言模型ChatGPT进行开发的Ai智能问答系统&#xff0c;并使用stablediffusion加最新的comfyui作为底层技术的绘画系统,使用comfyui的api接口&#xff0c;可以更灵活的定制自己的绘画工作流&#…

2.2 CE修改器:未知数值扫描

本关需要扫描未知数只扫描&#xff0c;要在不知道初始值的情况下找到一个在0到500之间的数值。首先&#xff0c;选择“未知的初始值”扫描方式&#xff0c;在数值类型中选择 4 字节&#xff0c;并点击“首次扫描”以开始扫描。扫描结束后&#xff0c;点击“打我”按钮进行一些操…

Java基础(第六期):Java基础巩固、逢七跳过、数组求和、判断数组是否相等、数组逆置、元素位置查找、评委打分、随机产生验证码

Java基础专栏【点击跳转学习】 Java基础&#xff08;第六期&#xff09;&#xff1a;对前五期的综合练习 文章目录 综合练习巩固JAVA基础第六期一、逢 7 跳过二、数组元素求和三、判断两个数组元素是否相同四、查找元素在数组中的索引五、数组元素反转使用for循环的实现方式一、…

【LeetCode刷题-二分查找】--278.第一个错误的版本

278.第一个错误的版本 /* The isBadVersion API is defined in the parent class VersionControl.boolean isBadVersion(int version); */public class Solution extends VersionControl {public int firstBadVersion(int n) {int left 1,right n;while(left < right){int…

webpack工作原理

目录 合并代码模块化webpack 的打包webpack 的结构webpack 的源码addEntry 和 _addModuleChainbuildModuleCompilation 的钩子产出构建结果 了解 webpack 实现原理&#xff0c;掌握 webpack 基础的工作流程&#xff0c;在平时使用 webpack 遇见问题时&#xff0c;能够帮助我们洞…

Doris学习--1、Doris简介、操作Doris、Doris架构(数据模型)

星光下的赶路人star的个人主页 心之所向&#xff0c;剑之所往 文章目录 1、Doris简介1.1 快速开始1.2 安装配置1.2.1 应知前提1.2.2 配置Doris1.2.2.0 配置前提1.2.2.1 配置FE&#xff08;Frontend&#xff09;1.2.2.2 启动FE1.2.2.3 连接FE1.2.2.4 停止FE1.2.2.5 配置BE&#…

【函数讲解】pygmo中的函数 fast_non_dominated_sorting() + 利用支配关系,学习一个SVM分类器,将解分为两类

这个函数是用来执行非支配排序的&#xff0c;可以分层构建Pareto&#xff0c;并返回每一层的解以及每个解支配其他解的索引、解被其他解支配的次数、解所在的非支配层级。这个函数对这些解进行非支配排序&#xff0c;并返回四个数组&#xff1a;ndf, dl, dc, 和 ndr。 ndf (Non…

2.3 CE修改器:浮点数扫描

本关需要使用 Cheat Engine 工具对浮点数进行扫描&#xff0c;完成修改任务。浮点数是一种带有小数点的数值&#xff0c;通过“浮点数”扫描方式进行修改。本关中&#xff0c;健康值为单精度浮点数&#xff0c;弹药值为双精度浮点数&#xff0c;需要将这两项数值都修改为 5000 …

InSAR形变监测方法与研究进展(朱建军,中南大学)

文章目录 摘要引言InSARInSAR原理SAR卫星 InSAR监测技术D-InSARMT-InSARPS-InSARSBAS-InSARDS-InSAR&#xff08;Distributed Scatterer InSAR&#xff09;MAI&#xff08;Multi-Aperture InSAR, 多孔径InSAR&#xff09; InSAR形变监测应用与发展城市沉降监测矿山形变监测地震…

深度探究深度学习常见数据类型INT8 FP32 FP16的区别即优缺点

定点和浮点都是数值的表示&#xff08;representation&#xff09;&#xff0c;它们区别在于&#xff0c;将整数&#xff08;integer&#xff09;部分和小数&#xff08;fractional&#xff09;部分分开的点&#xff0c;点在哪里。定点保留特定位数整数和小数&#xff0c;而浮点…

用互联网思维打造物流网(别人笑我太疯癫,我把自己当成仙)

引言 最近在写网络相关文章&#xff0c;在类比互联网与物流网时发现他们有很多相似之处。 互联网传输的是数据&#xff0c;物流网传输的是物品&#xff0c;功能相似&#xff0c;都是用于传输。 互联网在传输数据时&#xff0c;通过路由选择最佳传输路线&#xff1b;物流在运…

微信小程序数据交互和缓存

目录 前言&#xff1a; 数据交互 1. 发起网络请求 2. WebSocket 2.1实时数据库 3. 微信支付 数据缓存 1. 页面级缓存 2. 内存级缓存 3. 数据缓存策略 优化用户体验 总结 前言&#xff1a; 在开发微信小程序时&#xff0c;数据交互和缓存是非常重要的方面。本文将介…

【已解决】ModuleNotFoundError: No module named ‘matplotlib‘

问题描述 Traceback (most recent call last): File "/home/visionx/nickle/temp/SimCLR/linear_evaluation.py", line 207, in <module> import matplotlib.pyplot as plt ModuleNotFoundError: No module named matplotlib 解决办法 pip install matp…