赞
踩
def main():
url = ‘https://www.bilibili.com/v/popular/rank/bangumi’ # 网址
html = get_html(url) # 获取返回值
print(html) # 打印
if __name__ == ‘__main__’: #入口
main()
爬取结果如下图所示:
成功!
二、信息解析阶段:
第一步,先构建BeautifulSoup实例
soup = BeautifulSoup(html, ‘html.parser’) # 指定BeautifulSoup的解析器
第二步,初始化要存入信息的容器
# 定义好相关列表准备存储相关信息
TScore = [] # 综合评分
name = [] # 动漫名字
play= [] # 播放量
review = [] # 评论数
favorite= [] # 收藏数
第三步,开始信息整理
我们先获取番剧的名字,并将它们先存进列表中
# ******************************************** 动漫名字存储
for tag in soup.find_all(‘div’, class_=‘info’):
bf = tag.a.string
name.append(str(bf))
print(name)
此处我们用到了beautifulsoup的find_all()来进行解析。在这里,find_all()的第一个参数是标签名,第二个是标签中的class值(注意下划线哦(class_=‘info’))。 我们在网页界面按下F12,就能看到网页代码,找到相应位置,就能清晰地看见相关信息:
接着,我们用几乎相同的方法来对综合评分、播放量,评论数和收藏数来进行提取
# ******************************************** 播放量存储
for tag in soup.find_all(‘div’, class_=‘detail’):
bf = tag.find(‘span’, class_=‘data-box’).get_text()
if ‘亿’ in bf:
num = float(re.search(r’\d(.\d)?', bf).group()) * 10000
bf = num
else:
bf = re.search(r’\d*(\.)?\d’, bf).group()
play.append(float(bf))
print(play)
for tag in soup.find_all(‘div’, class_=‘detail’):
pl = tag.find(‘span’, class_=‘data-box’).next_sibling.next_sibling.get_text()
if ‘万’ not in pl:
pl = ‘%.1f’ % (float(pl) / 10000)
else:
pl = re.search(r’\d*(\.)?\d’, pl).group()
review.append(float(pl))
print(review)
for tag in soup.find_all(‘div’, class_=‘detail’):
sc = tag.find(‘span’, class_=‘data-box’).next_sibling.next_sibling.next_sibling.next_sibling.get_text()
sc = re.search(r’\d*(\.)?\d’, sc).group()
favorite.append(float(sc))
print(favorite)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。