头歌答案--爬虫实战

这篇具有很好参考价值的文章主要介绍了头歌答案--爬虫实战。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

头歌爬虫测试http://127.0.0.1:8000/album,头歌答案合集,爬虫,头歌,css,python,html

目录

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年国防科技大学分数线的网页,在浏览器中我们可以看到,各省的最高分、最低分、平均分都整齐地排列自在表格中。一个网页的源代码时常有成百上千行,其中很多代码都是为了布局页面样式服务的,而我们时常关心的是网页上的数据,而并不关心样式代码。所以如何从冗长的网页源代码中提取我们关心的数据,是这一关我们将要一起学习和体验的内容。文章来源地址https://www.toymoban.com/news/detail-764267.html

# -*- 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

到了这里,关于头歌答案--爬虫实战的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 《网络爬虫开发实战》学习笔记:1.1 HTTP基本原理

    1.1.1 URI和URL ​ URI ,全称Uniform Resource Identifier,即 统一资源标志符 ; URL ,全称Uniform Resource Locator,即 统一资源定位符 。 ​ 举例来说,https://github.com/favicon.ico既是一个URI,也是一个URL。即有favicon.ico这样一个图标资源,用这样一个URI/URL指定了访问它的唯一方式,其中包括

    2024年02月03日
    浏览(46)
  • 高并发数据抓取实战:使用HTTP爬虫ip提升抓取速度

    又到每天一期学习爬虫的时间了,作为一名专业的爬虫程序员,今天要跟你们分享一个超实用的技巧,就是利用HTTP爬虫ip来提升高并发数据抓取的速度。听起来有点高大上?别担心,我会用通俗易懂的话来和你们说,让你们秒懂怎么操作的。 首先,咱们得理解一下为什么HT

    2024年02月11日
    浏览(48)
  • 头歌Elasticsearch 基本用法答案

    su es   /opt/install/elasticsearch-6.5.4/bin/elasticsearch   第1关 Elasticsearch基本概念 #!/bin/bash # 请在此处编写命令 # ********** Begin ********** # # 通过 curl 命令查询 Elasticsearch 中所有文档的数量 curl -i -XGET \\\'http://127.0.0.1:9200/_count?pretty\\\' # ********** End ********** # 第2关 Elasticsearch索引的创建和查询

    2024年02月05日
    浏览(137)
  • linux头歌实验答案

    一.linux之用户管理 (1)创建/删除新用户 新创建一个用户 newUser ,并自动创建其登录目录; 删除系统已经存在的用户 oldUser ,并自动删除其关联的登录目录; 将当前工作目录切换到新创建的用户 newUser 家目录; 使用 pwd 命令打印出当前工作目录。 (2)  Linux 用户密码管理

    2024年02月08日
    浏览(35)
  • 头歌答案Python,001

    金宝,答案在这里,自己抄。 1,第一关,计算机 2,第1关:练习-Python函数之变量的作用域 3, 第1关 练习-Python函数之函数返回值

    2024年02月08日
    浏览(34)
  • 头歌实践教学平台答案(Java实训作业答案)

    搜集整理了一份最新最全的头歌(EduCoder)Java实训作业答案,分享给大家.(EduCoder)是信息技术类实践教学平台。(EduCoder)涵盖了计算机、大数据、云计算、人工智能、软件工程、物联网等专业课程。超60000个实训案例,建立学、练、评、测一体化实验环境。这份是头歌实践教学平

    2023年04月11日
    浏览(82)
  • 头歌JAVA数据结构答案

    一、Java数据结构-循环链表的设计与实现 第1关 单循环链表的实现—链表的添加、遍历 第2关 单循环链表的实现—链表的删除 第3关 双向循环链表的实现—链表的插入 第4关:双向循环链表的实现—链表的删除 二、Java数据结构-线性表的设计与实现 第1关:顺序表的实现之增删

    2024年02月08日
    浏览(42)
  • 头歌php mysql操作答案

    第1关:PHP对MySQL的基本操作 ?php /**  * 初始化数据库连接  */ require \\\'public_function.php\\\'; //创建对象,连接数据库 /*****begin*********/ $link=new mysqli(\\\'127.0.0.1\\\',\\\'root\\\',\\\'123123\\\'); /*****end*********/ //判断数据库连接是否成功,如果不成功则显示错误信息并终止脚本继续执行 if($link-connect_error){  

    2024年02月08日
    浏览(44)
  • RDD的创建 头歌答案

    第1关 集合并行化创建RDD 编程要求 根据提示,在右侧编辑器 begin-end 处补充代码,计算并输出各个学生的总成绩。 (\\\"bj\\\",88) : bj 指学生姓名, 88 指学生成绩。 测试说明 平台会对你编写的代码进行测试: 预期输出: 开始你的任务吧,祝你成功! 代码 第2关:读取外部数据集

    2024年02月07日
    浏览(56)
  • 头歌实践教学平台答案(消息队列面试题及答案)

    头歌实践教学平台消息队列 面试题及答案,消息队列⾯试题及答案。 1、为什么使用消息队列? 消息队列使用的场景和中间件有很多,但解决的核心问题主要是:异步、解耦、消峰填谷。 异步、解耦、消峰填谷这是消息队列最大的优点,除了这些消息队列还可以会解决一些

    2024年02月11日
    浏览(66)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包