爬取b站排行榜并存到mysql中
目的
b站是我平时看得最多的一个网站,最近接到了一个爬虫的课设。首先要选择一个网站,并对其进行爬取,最后将该网站的数据存储并使其可视化。
网站的结构
目标网站:bilibili排行榜
网页的层次
首先要确定要提取的信息,也就是标题、播放量、作者up主、评分、播放量和评论量
在网页源代码中找到要找的信息
每个网页中大概有多条这样的rank-item项目,要提取的信息就包含其中
1.名称在title类的a标签下
2.播放量、评论数、和up主在data-box类的span标签下
3.综合评分在pts类的div标签下
对应解析其的代码
def getPage(url):#爬取单个页面,核心代码
spider=Spider(url)
spider.setSoup()
itemList=spider.findTagByAttrs('li','rank-item')
pageContentList=[]
for item in itemList:
pageContentItem=[]
for title in item.find_all('a','title'):
pageContentItem.append(title.string)
# print(title.string)
for playnum in item.find_all('span','data-box'):
pattern=r">([^<]+)<"
n=re.findall(pattern,playnum.__str__())[0]
pageContentItem.append(n)
# print(n)
# print(item.find_all('div','pts')[0].div.string)
pageContentItem.append(item.find_all('div','pts')[0].div.string)
pageContentList.append(pageContentItem)
return pageContentList
网站的层次
通过观察连接参数的变化
https://www.bilibili.com/ranking/all/0/0/3
以这个链接为例,通过实验,该网页链接的参数代表各种意义,ranking代表排行,all代表是否是全站还是原创,第一个参数0代表,各个分区,第二个参数0代表了全部投稿还是近期投