20220621 bs4学习总结

20220621 bs4学习总结

from bs4 import BeautifulSoup

bs4 基本操作

  1. 创建网页对应的BeautifulSoup对象
    “”"
    BeautifulSoup(网页数据, 解析器名称)

网页数据 - 需要解析的网页源代码
解析器名称 - lxml
“”"
html = open(‘data.html’, encoding=‘utf-8’).read()
soup = BeautifulSoup(html, ‘lxml’)

  1. 获取标签
    “”"
    soup对象.select(css选择器) - 在整个网页中,获取css选择器选中的所有标签,返回值是列表,列表中的元素是标签对象
    soup对象.select_one(css选择器) - 在整个网页中,获取css选择器选中的标签中的第一个标签,返回值是标签对象

标签对象.select(css选择器) - 在指定标签中,获取css选择器选中的所有标签,返回值是列表,列表中的元素是标签对象
标签对象.select_one(css选择器) - 在指定标签中,获取css选择器选中的标签中的第一个标签,返回值是标签对象
“”"

result = soup.select(‘p’)
print(result)

result = soup.select_one(‘p’)
print(result)

获取所有商品的价格标签
result = soup.select(‘.goods_list .price’)
print(result)

案例1:获取第一个商品的价格标签
方法1:
result = soup.select_one(‘.goods_list .price’)
print(result)

方法2:
result = soup.select(‘.goods_list .price’)[0]
print(result)

案例2:获取第二个商品的价格标签
方法1:
result = soup.select(‘.goods_list .price’)[1]
print(result)

方法2
result = soup.select_one(‘.goods_list>li:nth-child(2)>.price’)
print(result)

  1. 获取标签内容、获取标签属性
    a = soup.select_one(‘div.c1>a’)

1)获取标签内容: 标签对象.text
print(a.text)

2)获取标签属性:标签对象.attrs[属性名]
print(a.attrs[‘href’])
print(a.attrs[‘target’])

练习1:获取所有课程的名字
names_p = soup.select(‘.course_list .name’)
course_names = [x.text for x in names_p]
print(course_names)

练习2:获取第二个课程的价格
price_p = soup.select_one(‘.course_list>li:nth-child(2)>.price’)
print(price_p.text)

练习3:获取所有的课程以及对应的价格
方法1:
prices_p = soup.select(‘.course_list .price’)
course_prices = [x.text for x in prices_p]
times_p = soup.select(‘.course_list span’)
course_times = [x.text for x in times_p]

[‘数据分析’, ‘前端开发’, ‘java后端’]
[‘20000’, ‘22000’, ‘23000’]
[‘22周’, ‘23周’, ‘23周’]
[{‘name’:'数据分析, ‘price’: ‘20000’,‘time’: ‘22周’}, {‘name’:'前端开发, ‘price’: ‘22000’,‘time’: ‘23周’}, …]
result = map(lambda i1, i2, i3: {‘name’: i1, ‘price’: i2, ‘time’: i3}, course_names, course_prices, course_times)
print(list(result))

方法2:
courses_li = soup.select(‘.course_list>li’)
all_course = []

for li in courses_li:
name = li.select_one(‘.name’).text
price = li.select_one(‘.price’).text
time = li.select_one(‘span’).text
all_course.append({‘name’: name, ‘price’: price, ‘time’: time})

print(all_course)

eg:bs4豆瓣电影解析

# 1. 获取网络
def get_net_data(start):
    headers = {
        'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36'
    }
    response = requests.get(f'https://movie.douban.com/top250?start={start}&filter=', headers=headers)
    if response.status_code == 200:
        return response.text
    else:
        return None


# 2. 解析数据
def analysis_data(html):
    soup = BeautifulSoup(html, 'lxml')
    all_li = soup.select('.grid_view>li')       # 所有电影对应的li标签的列表
    all_movie = []
    for li in all_li:
        name = li.select_one('.hd>a>span').text
        info = li.select_one('.bd>p').text.strip().split('\n')[1].strip()
        info = sub(r'\s+', '', info).split('/')
        time = info[0]
        country = info[1]
        f_type = info[-1]
        score = li.select_one('.rating_num').text
        comment_count = li.select_one('.star>span:nth-child(4)').text[:-3]
        all_movie.append({
            '名称': name,
            '评分': score,
            '评论人数': comment_count,
            '国家': country,
            '上映时间': time,
            '类型': f_type
        })

    with open('files/豆瓣电影.csv', 'a', encoding='utf-8', newline='') as f:
        writer = csv.DictWriter(f, ['名称', '评分', '评论人数', '国家', '上映时间', '类型'])
        if start == 0:
            writer.writeheader()
        writer.writerows(all_movie)


if __name__ == '__main__':
    for start in range(0, 226, 25):
        data = get_net_data(start)
        analysis_data(data)
        print('一页数据获取成功!', start//25)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
学生成绩管理系统BS架构版的开发需要分为前端和后端两部分,前端主要负责用户界面的实现,后端主要负责数据处理和业务逻辑的实现。 前端部分: 1. 用户登录界面:实现用户登录功能,并且根据用户类型(学生、教师或管理员)加载不同的首页。 2. 学生首页:显示学生课程列表、成绩查询、学习建议等功能。 3. 教师首页:显示教师的课程列表、成绩录入和查询、成绩分析等功能。 4. 管理员首页:显示学生和教师的信息管理、课程管理、成绩管理等功能。 5. 课程列表界面:显示所有课程的列表,并提供课程搜索和过滤功能。 6. 成绩查询界面:提供学生查询个人成绩,教师查询学生成绩的功能。 7. 成绩录入界面:提供教师录入学生成绩的功能。 8. 学生成绩分析界面:提供学生成绩分析,包括成绩排名、成绩趋势等功能。 9. 学习建议界面:提供学习建议,根据学生的成绩情况和历史表现,给出相应的学习建议。 后端部分: 1. 用户认证:验证用户的身份信息,判断用户是否有权限登录系统。 2. 用户管理:实现管理员对学生和教师用户信息的添加、删除和修改操作。 3. 课程管理:实现管理员对课程信息的添加、删除和修改操作。 4. 成绩管理:实现教师对学生成绩的录入和修改操作,学生对个人成绩的查询操作。 5. 成绩分析:实现学生成绩排名、成绩趋势等功能。 6. 学习建议:实现根据学生的成绩情况和历史表现,给出相应的学习建议。 7. 数据库管理:管理系统中的数据库,包括数据备份、恢复和维护等操作。 总结: 学生成绩管理系统BS架构版的实现需要前后端开发人员的协同合作。前端主要负责用户界面的实现,后端主要负责业务逻辑和数据处理的实现。通过使用BS架构,可以实现系统的分布式部署、提高系统的可扩展性和可维护性,同时也可以提高系统的响应速度和用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Denis_1412

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值