网页分析和一些基础题目

举报
在下周周ovo 发表于 2022/08/10 15:01:44 2022/08/10
【摘要】 网页分析和一些基础题目

本次练习的是<有关网页分析和一些基础题目>,想要学习Python和巩固基础的可以现在打开牛客来一起学习吧。

文章目录

📄题目一

📜题目要求

📜我的解析

📜我的答案

📄题目二

📜我的解析

📜我的答案

📄题目三

📜题目要求

📜我的解析 

📜我的答案

📄题目四

📜写在前面

📜题目要求

📜我的答案

📜我的解析:



📄题目一

📜题目要求

📜我的解析

 本道题目难度较小主要考察了内置函数的基本使用方法

📜我的答案

def main(lst):
    return sorted(lst,key=abs)[len(lst) - 1]




📄题目二

编辑


📜我的解析

本题难度较小,主要考察列表,匿名函数,列表推导式的基本使用方法。

📜我的答案

def main(lst):
    is_odd = lambda l : l % 2 == 1        #判断列表中元素是否为奇数的函数
    return [i for i in filter(is_odd,lst)]#生成器中的列表推导式

filter内置函数的使用方法------>>【http://t.csdn.cn/NV79F

列表推导式的使用方法  ------>> 【http://t.csdn.cn/eIkZj

📄题目三

📜题目要求



📜我的解析 

本题难度很小主要考察的是if-else语句和格式化输出

📜我的答案

print('What kind of drink would you like?')
kind_of_drink = input()
if kind_of_drink == 'cola':
    print('Below is your cola. Please check it!')
else:
    print('The {} has been sold out!'.format(kind_of_drink))


📄题目四

📜写在前面

写本道题目之前需要掌握以下知识点哟,不清楚的可以翻看我之前的博客或者是网上查找相应的视频来回顾

  • 知识点一👉urlib库的使用中请求对象的定制使用urllib来获取源码
  • 知识点二👉re模块的基本使用方法
  • 知识点三👉json模块的基本使用方法
  • 知识点四👉正则匹配(用于对网页想要信息的提取和不想要信息的剔除
  • 知识点五👉文件的基本使用方法

📜题目要求

👉获取某瓣电影排名前十页电影的<"电影排名" "电影标题" "豆瓣评分"和"评论人数">并且将爬取下来的数据放到名为<豆瓣电影信息>的文件中


📜我的答案

import json
import re
import urllib.request

def html_get(url):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'
    }
    request = urllib.request.Request(url=url, headers=headers)
    response = urllib.request.urlopen(request).read().decode('utf-8')
    return response

def page_info(h):
    com = re.compile(
        '<div class="item">.*?<div class="pic">.*?<em .*?>(?P<电影排名>\d+).*?<span class="title">(?P<电影标题>.*?)</span>'
        '.*?<span class="rating_num" .*?>(?P<豆瓣评分>.*?)</span>.*?<span>(?P<评论人数>.*?)评价</span>', re.S)
    ret = com.finditer(h)
    for i in ret:
        yield {
            "电影排名": i.group("电影排名"),
            "电影标题": i.group("电影标题"),
            "豆瓣评分": i.group("豆瓣评分"),
            "评论人数": i.group("评论人数"),
        }

def main(num):
    url = 'https://movie.douban.com/top250?start=%s&filter=' % num
    douban_html = html_get(url)
    res = page_info(douban_html)
    print(res)
    f=open("豆瓣电影信息","a",encoding="utf8")
    for obj in res:
        print(obj)
        data=json.dumps(obj,ensure_ascii=False)
        f.write(data+"\n")
    f.close()

if __name__ == '__main__':
    count = 0
    for page_num  in range(10):
        main(count)
        count += 25

输出结果:

输出结果:



 知识点:

flags有很多可选值:

 

  • re.I(IGNORECASE)忽略大小写,括号内是完整的写法
  • re.M(MULTILINE)多行模式,改变^和$的行为
  • re.S(DOTALL)点可以匹配任意字符,包括换行符
  • re.L(LOCALE)做本地化识别的匹配,表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境,不推荐使用
  • re.U(UNICODE) 使用\w \W \s \S \d \D使用取决于unicode定义的字符属性。在python3中默认使用该flag
  • re.X(VERBOSE)冗长模式,该模式下pattern字符串可以是多行的,忽略空白字符,并可以添加注释

📜我的解析:

 html_get(url)函数:

  • 作用:

获取豆瓣对应网址的网页源码

  • 参数:

要获取信息的网址

  • 返回值:

豆瓣对应网址的网页源码

✨ page_info(h)函数

  • 作用:

该函数的作用是匹配获取到的网页源码中的"电影排名" "电影标题" "豆瓣评分"和"评论人数"

  • 参数:

对应网址的网页源码

  • 返回值:

一个生成器函数

✨ main(num)函数

  • 作用:

顾名思义该函数是程序中的主函数,调用它获取对应页数的<"电影排名" "电影标题" "豆瓣评分"和"评论人数">并且将爬取下来的数据放到名为<豆瓣电影信息>的文件中

  • 参数:

num = 0 则表示第一页,num = 25则表示第二页,num = 50则表示第三页,以此类推,因为每页有25部电影。

  • 返回值:

将爬取下来的数据放到名为<豆瓣电影信息>的文件中

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。