关注小菜鸡IT学python
目的:把B站上的番剧《全职高手》的评论全部爬取
首先打开全职高手主页,按F12出现下图
再按短评,下面出现一个url,那个就是储存评论的url。
这个就是储存评论的url,但是只能存储20条。这时我们进去看看
这时,我们就要找规律。如何爬取下一页的评论。我们回到《全职高手》主页,往下拉。出现第二个url
这个url和第一个一样,都是储存评论的。但是我们对比一下。
第一个:https://api.bilibili.com/pgc/review/short/list?media_id=5852&ps=20&sort=0
第二个:https://api.bilibili.com/pgc/review/short/list?media_id=5852&ps=20&sort=0&cursor=79177741891494
第三个:https://api.bilibili.com/pgc/review/short/list?media_id=5852&ps=20&sort=0&cursor=79121906942504
按照以往的分析经验,通常这种动态加载的情况,第一个url里一定包括了第二个的url,第二个url里一定有第三个的url
果然,我们在第一个url的最下面发现了next。
这个next是第二个url的组成部分
通过后续,我们也在第二个url的最下面发现了第三个url的组成部分
所以我们构成了一个思路,通过循环。爬取一个url的评论后,就取走next组成新的url,继续爬取新的评论。url的思路是有了,但是我们不可能爬取一整页,因为url里有我们不需要的东西。这时我们进去url里看看分析一下。
通过这张图片,我们可以看出,content里面储存的是评论。
所以我们简化只爬取content里面的东西就可以了!
最后附上源码:
import requests
import json
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36"}#伪装成浏览器,绕过反爬
url='https://api.bilibili.com/pgc/review/short/list?media_id=5852&ps=20&sort=0'
# 发送get请求
w = requests.get(url, headers=headers).text
json_comment=json.loads(w)
total=json_comment['data']['list']#url中list中存储的内容
num=json_comment['data']['total']#total中的内容,一共有多少个url
s=json_comment['data']#url中的所有内容
j = 0
while j < num:
total = json_comment['data']['list']
for i in range(len(total)):
comment = total[i]['content']#获取url中的评论
print(comment)
j += 1
next=json_comment['data']['next']#获取next中的内容
next1 = str(next)
url1 = url + '&cursor=' + next1
response = requests.get(url1, headers=headers).text
json_comment = json.loads(response)
最后输出结果:数也数不清多少条评论