|
|
|
@ -0,0 +1,107 @@
|
|
|
|
|
import requests
|
|
|
|
|
from bs4 import BeautifulSoup
|
|
|
|
|
import csv
|
|
|
|
|
import time
|
|
|
|
|
|
|
|
|
|
headers = {
|
|
|
|
|
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
def get_info(url, csv_writer):
|
|
|
|
|
wb_data = requests.get(url, headers=headers)
|
|
|
|
|
soup = BeautifulSoup(wb_data.text, 'html.parser')
|
|
|
|
|
ranks = soup.select('span.pc_temp_num')
|
|
|
|
|
titles = soup.select('div.pc_temp_songlist > ul > li > a')
|
|
|
|
|
times = soup.select('span.pc_temp_tips_r > span')
|
|
|
|
|
|
|
|
|
|
for rank, title, time in zip(ranks, titles, times):
|
|
|
|
|
data = {
|
|
|
|
|
'rank': rank.get_text().strip(),
|
|
|
|
|
'singer': title.get_text().split('-')[0].strip(),
|
|
|
|
|
'song': title.get_text().split('-')[1].strip() if len(title.get_text().split('-')) > 1 else '',
|
|
|
|
|
'time': time.get_text().strip()
|
|
|
|
|
}
|
|
|
|
|
csv_writer.writerow(data)
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
|
urls = ['http://www.kugou.com/yy/rank/home/{}-8888.html'.format(str(i)) for i in range(1, 24)]
|
|
|
|
|
|
|
|
|
|
# 打开一个CSV文件用于写入
|
|
|
|
|
with open('kugou_rank.csv', mode='w', newline='', encoding='utf-8') as file:
|
|
|
|
|
writer = csv.DictWriter(file, fieldnames=['rank', 'singer', 'song', 'time'])
|
|
|
|
|
|
|
|
|
|
# 写入表头
|
|
|
|
|
writer.writeheader()
|
|
|
|
|
|
|
|
|
|
for url in urls:
|
|
|
|
|
get_info(url, writer)
|
|
|
|
|
time.sleep(1)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
IF嵌套函数的运用案例
|
|
|
|
|
案例1:员工绩效评估
|
|
|
|
|
|
|
|
|
|
假设您有一个员工绩效表,其中包含员工的姓名、销售额和销售目标。您想要根据员工的销售额与目标的比较结果来评估他们的绩效(优秀、良好、一般、差)。
|
|
|
|
|
|
|
|
|
|
excel
|
|
|
|
|
=IF(C2>B2*1.2, "优秀", IF(C2>B2, "良好", IF(C2>B2*0.8, "一般", "差")))
|
|
|
|
|
这里,C2是员工的销售额,B2是销售目标。如果销售额超过目标的120%,则绩效为“优秀”;如果超过目标但不超过120%,则为“良好”;如果销售额在目标的80%到100%之间,则为“一般”;如果低于80%,则为“差”。
|
|
|
|
|
|
|
|
|
|
VLOOKUP函数的运用案例
|
|
|
|
|
案例2:查找员工部门
|
|
|
|
|
|
|
|
|
|
假设您有两个表格,一个是员工信息表,包含员工的姓名和部门编号;另一个是部门信息表,包含部门编号和部门名称。您想要根据员工的姓名查找他们的部门名称。
|
|
|
|
|
|
|
|
|
|
在员工信息表的D2单元格中(假设姓名在A列,部门编号在B列),您可以使用以下VLOOKUP公式:
|
|
|
|
|
|
|
|
|
|
excel
|
|
|
|
|
=VLOOKUP(A2, 部门信息表!A:B, 2, FALSE)
|
|
|
|
|
这里,A2是员工的姓名,部门信息表!A:B是部门信息表的范围(A列为姓名,B列为部门名称,但实际上VLOOKUP在A列查找部门编号的匹配项,因为我们需要通过姓名先找到对应的部门编号,这里为了说明假设姓名也在A列,实际操作中应使用部门编号对应的列),2表示返回匹配项所在行的第二列的值(即部门名称),FALSE表示精确匹配。
|
|
|
|
|
|
|
|
|
|
注意:由于VLOOKUP直接在第一列查找,而我们的案例是基于姓名查找,这里实际上需要先用另一个VLOOKUP或INDEX+MATCH等函数找到姓名对应的部门编号,然后再用VLOOKUP或INDEX+MATCH查找部门编号对应的部门名称。为了简化说明,上述公式是一个概念性的示例。
|
|
|
|
|
|
|
|
|
|
COUNTIF或COUNTA统计特定值与非空值案例
|
|
|
|
|
案例3:统计特定产品销售额
|
|
|
|
|
|
|
|
|
|
假设您有一个销售记录表,其中包含产品名称和销售额。您想要统计特定产品的总销售额。
|
|
|
|
|
|
|
|
|
|
在E1单元格中(假设产品名称在A列,销售额在B列),您可以使用以下公式:
|
|
|
|
|
|
|
|
|
|
excel
|
|
|
|
|
=SUMIF(A:A, "特定产品名称", B:B)
|
|
|
|
|
注意:这里应该是SUMIF而不是COUNTIF,因为我们要计算销售额的总和而不是数量。COUNTIF用于计算满足条件的单元格数量。
|
|
|
|
|
|
|
|
|
|
如果您想要统计非空销售额的数量,可以使用COUNTA函数结合辅助列(或者如果销售额列没有0或负数作为有效值,可以直接使用):
|
|
|
|
|
|
|
|
|
|
excel
|
|
|
|
|
=COUNTA(B:B) - COUNTIF(B:B, "")
|
|
|
|
|
或者更简单地(如果0不是有效销售额):
|
|
|
|
|
|
|
|
|
|
excel
|
|
|
|
|
=COUNTIF(B:B, ">0")
|
|
|
|
|
筛选空值与异常值案例
|
|
|
|
|
案例4:筛选空值邮箱
|
|
|
|
|
|
|
|
|
|
假设您有一个包含员工姓名和邮箱地址的表格。您想要筛选出邮箱地址为空的员工。
|
|
|
|
|
|
|
|
|
|
选择邮箱地址列。
|
|
|
|
|
点击Excel菜单栏上的“数据”选项卡。
|
|
|
|
|
点击“筛选”按钮,此时邮箱地址列会出现一个下拉箭头。
|
|
|
|
|
点击下拉箭头,选择“(空值)”来筛选空邮箱地址。
|
|
|
|
|
案例5:筛选异常销售数据
|
|
|
|
|
|
|
|
|
|
假设您有一个销售记录表,其中包含销售日期、销售员和销售额。您想要筛选出销售额异常高(例如超过10000)或异常低(例如为0或负数)的记录。
|
|
|
|
|
|
|
|
|
|
选择销售额列。
|
|
|
|
|
使用条件格式来突出显示异常值(例如,红色填充表示异常高,黄色填充表示异常低)。
|
|
|
|
|
点击“开始”选项卡中的“条件格式”。
|
|
|
|
|
选择“新建规则”。
|
|
|
|
|
选择“使用公式确定要设置格式的单元格”。
|
|
|
|
|
输入公式,例如=D2>10000(D列为销售额列)来突出显示异常高的值。
|
|
|
|
|
设置所需的格式,然后点击“确定”。
|
|
|
|
|
重复上述步骤,为异常低的值设置不同的条件格式。
|
|
|
|
|
或者,您也可以使用筛选功能来直接筛选出这些异常值。
|
|
|
|
|
点击销售额列的下拉箭头。
|
|
|
|
|
选择“数字筛选器”。
|
|
|
|
|
选择“大于”或“小于”等选项,并输入相应的阈值来筛选异常值。
|
|
|
|
|
希望这些案例能帮助您更好地理解如何在Excel中运用IF嵌套、VLOOKUP函数、COUNTIF/COUNTA函数以及筛选空值和异常值。
|