day18-csv和bs4

本文介绍了CSV文件的读写操作,包括使用Python的reader和writer,以及DictReader和DictWriter。同时,文章讲解了BeautifulSoup4(bs4)库,这是一个用于解析HTML和XML文档的工具,重点阐述了CSS选择器在网页解析中的应用。
摘要由CSDN通过智能技术生成

1. csv文件

1.1 什么是csv文件

csv文件叫做逗号分割值文件,像Excel文件一样以行列的形式保存数据,保存数据的时候同一行的多列数据用逗号隔开

1.2 csv文件的读写操作
  1. csv文件读操作

    ​ a. reader:创建根据文件对象创建对应的reader,获取文件内容

    ​ b. DictReader

from csv import reader, DictReader

with open('file/电影.csv', encoding='utf-8', newline='') as f:
    r1 = reader(f)
    print(next(r1))
    print(list(r1))
    
with open('file/电影.csv', encoding='utf-8', newline='') as f:
    r2 = DictReader(f)
    print(next(r2))
    for x in r2:
        print(x)
  1. 写操作

    ​ a. writer

    ​ b. DictReader

with open('file/student2.csv', 'w', encoding='utf-8', newline='') as f:
    # 1. 根据文件对象writer对象
    w2 = DictWriter(f, ['姓名', '性别', '年龄'])
    # 2. 写入数据
    # 1) 将字典的键作为第一行写入文件
    w2.writeheader()
    w2.writerow({'姓名': '小明', '性别': '男', '年龄': 18})
    w2.writerows([
        {'姓名': '张三', '性别': '男', '年龄': 19},
        {'姓名': '李四', '性别': '女', '年龄': 20},
        {'姓名': '王五', '性别': '男', '年龄': 30}
    ])

2. bs4

bs4(beautifulsoup4的缩写),它是基于css选择器的网页解析器

css语法:

​ 选择器{属性名1: 属性值2; 属性名2: 属性值2; …}

​ 常见属性:color(设置字体颜色) background-color(背景颜色)font-size(字体大小)width(宽度)height(高度)border(边框)

选择器:

  1. 元素选择器(标签选择器) - 将标签作为选择器,选中所有指定的标签

    a{} - 选中所有的a标签
    p{} - 选中所有的p标签

    span{} - 选中所有的span标签

  2. id选择器 - 在标签的id属性前加#作为一个选择器,选中id属性值为指定值的标签

    ​ 注意:一个网页中id属性值是唯一的

    #a{} - 选中id属性值为a的标签

    #b1{} - 选中id属性值为b1的标签

  3. class选择器 - 在标签的class属性前加.作为一个选择器,选中所有class属性值为指定值的标签

    ​ 注意:一个网页中多个标签的class属性值可以相同;同一个标签可以有多个不同的class

    ​ 只有一个class属性值标签的写法:<标签名 class="c1">

    ​ 有多个class属性值标签的写法:<标签名 class="c1 c2 c3">

    .a{} - 选中class属性值为a标签

    .c1{} - 选中class属性值为c1的标签

    .a.b{} - 选中class属性值同时为a和b标签

    a.c1{} - 选中所有class值为c1的a标签

  4. 子代选择器 - 将两个选择器用>连接成一个选择器(前后形成父子关系)

    div>a{} - 选中所有在div标签中的a标签(a标签必须是div的子标签)

  5. 后代选择器 - 将两个选择器用空格连接成一个选择器(前后形成后代关系)

    div a{} - 选中所有在div标签中的a标签(a标签必须是div的后代标签)

注意:安装的时候装beautifulsoup4,使用的时候用bs4

1. 根据网页源代码创建soup对象

Beautifulsoup(网页源代码, 'lmxl')

f = open(r'file/data.html', encoding='utf-8')
soup = BeautifulSoup(f.read(), 'lxml')
f.close()
2. 获取标签

soup对象.select(css选择器) - 获取整个网页中选择器选中的所有标签,返回值是一个列表,列表中的元素是标签对象(找不到返回空列表)

soup对象.select_one(css选择器) - 获取整个网页中选择器选中的第一个标签,返回值是标签对象(找不到返回None)

标签对象.select(css选择器) - 获取指定标签中css选择器选中的所有标签

标签对象.select_one(css选择器) - 获取指定标签中css选择器选中的第一个标签

result = soup.select('p')
print(result)

result = soup.select('.c1')
print(result)

result = soup.select_one('p')
print(result)

result = soup.select('div p')
print(result)

box1 = soup.select_one('#box1')
result = box1.select('p')
print(result)

p1 = soup.select_one('span>p')
a1 = box1.select_one('a')
3. 获取标签内容和标签属性

标签对象.text - 获取标签内容

标签对象.attrs['属性名'] - 获取标签指定属性的值

print(p1.text)      # 我是段落5
print(a1.text)      # 我是超链接3
print(a1.attrs['href'])     # https://www.baidu.com
对不起,我作为一个文本生成模型,无法直接编写实际运行的代码,也无法访问网络或操作文件系统。但是,我可以为你提供一个Python爬虫的大致框架,你可以基于这个框架去实现你的需求。这通常涉及到使用`requests`库获取网页内容,然后使用`BeautifulSoup`或`lxml`解析HTML,最后用`pandas`处理数据并保存到CSV。 ```python import requests from bs4 import BeautifulSoup import pandas as pd # Step 1: 获取网页内容 url = "https://jw.gxdlxy.com/" session = requests.Session() login_data = { # 这里需要填充实际的登录信息 'username': 'your_username', 'password': 'your_password', # 可能还需要其他字段,查看页面源代码找出对应的name属性 } response = session.post(url + "login", data=login_data) if response.status_code == 200: # 检查登录是否成功 # Step 2: 确定课程表的URL或页面路径 course_table_url = "path/to/course/schedule" # 获取课程表页面 course_page = session.get(course_table_url) # Step 3: 解析HTML soup = BeautifulSoup(course_page.content, 'html.parser') # 查找包含课表数据的部分,这部分结构可能会有变动,需视网站而定 table_rows = soup.find_all('tr') # 假设课表是一个表格 # 创建空列表存储数据 data_list = [] for row in table_rows: cells = row.find_all('td') # 根据HTML结构提取所需的数据 period = cells[0].text # 假设第一个td是周次 date = cells[1].text day = cells[2].text section = cells[3].text class_info = cells[4].text location = cells[5].text course_name = cells[6].text # 添加到数据列表中 data_list.append([period, date, day, section, class_info, location, course_name]) # Step 4: 数据处理并保存到CSV df = pd.DataFrame(data_list, columns=['周次', '日期', '星期', '节次', '班级', '地点', '课程名称']) df.to_csv("学号.csv", index=False) else: print("登录失败") ``` 请注意,上述代码仅供参考,实际的URL、HTML结构以及登录表单字段都需要你根据目标网站的具体情况进行调整。同时,很多网站为了防止爬虫,可能会有反爬机制,或者课表数据可能需要通过API或其他方式获取。如果你不确定如何获取数据,建议查看网站的开发者文档或者联系网站管理员。同时,请遵守网站的使用政策。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值