python爬虫100例--微博评论

python爬虫100例--微博评论,第1张

##今天是个“特殊”的日子##

今天是2022年04月25日,上证指数刷新了至2020年7月以来的历史新低。对于股民来说,抱怨肯定少不了。那么小编想看看他们都说了些啥。

1、目标网站

微博某博主号的文章

2、工具

a> sublime text
b> python 解释器

3、网站分析 a> 找到评论对应的网址
  1. Step1:打开源代码
    发现没有任何与评论相关的信息。放弃这条路
  2. Step2:登录网站
    打开开发者工具,点击查看评论,观察Fetch/XHR这个模块下的url.

    很明显,主要的url如下所示:
url = "https://weibo.com/ajax/statuses/buildComments?\n
is_reload=1&id=4762132170410005&is_show_bulletin=2&is_mix=0&count=10&uid=5993531560"

仔细观察“”预览“”下的内容有仅仅只有10条记录(count=10),因此继续拖动鼠标,发现出现了新的url如下所示:

url = "https://weibo.com/ajax/statuses/buildComments?\n
flow=0&is_reload=1&id=4762132170410005&is_show_bulletin=2&is_mix=0&max_id=269013940992537&count=20&uid=5993531560"

比较上面两个url,我们可以得出在新的url中,我们发现多了一些新的参数,例如:

flow=0,max_id = 269013940992537

这样看来,url之间并有什么规律,我们继续观察下一条新的url,如下:

url= "https://weibo.com/ajax/statuses/buildComments?\n
flow=0&is_reload=1&id=4762132170410005&is_show_bulletin=2&is_mix=0&max_id=159062778435413&count=20&uid=5993531560"

通过比较第二条和第三条url,我们发现只有一处不同,即

max_id_1 = 269013940992537
max_id_2 = 159062778435413

继续观察的话,我们很容易得出了url之间的关系,只有max_id发生了变化。只要找到每一url的max_id就可以获取到相应的数据了。

如果小伙伴足够细心的话,就很快就能发现,当前url的内容里面有下一条url的max_id,不信的话可以仔细瞧瞧。

这样一来,评论对应的网址找到了。

b> 敲代码,存储
import requests
import json
import time 

def download(html):
	contents = html["data"]
	for item in contents:
		message = item["text_raw"]
		fp.write(message)
		fp.write("\n")

def get_comment(url):
	global count
	count+=1
	headers = {
		"accept":"application/json, text/plain, */*",
		"accept-encoding":"gzip, deflate, br",
		"accept-language":"zh-CN,zh;q=0.9",
		"cache-control":"no-cache",
		"cookie":"请使用各位自己的Cookie,前提是必须是登陆后的"
		"pragma":"no-cache",
		"referer":"https://weibo.com/1191965271/Ll4up5uxI",
		"sec-ch-ua-mobile":"?0",
		"sec-fetch-dest":"empty",
		"sec-fetch-mode":"cors",
		"sec-fetch-site":"same-origin",
		"traceparent":"00-f2e1a0f377faabdd2d3b38f06e9a59ae-6ae9c963cc8d5d53-00",
		"user-agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36",
		"x-requested-with":"XMLHttpRequest",
		"x-xsrf-token":"DBrIiRZWYprdvVW6Q1FymDxW",
	}
	res = requests.get(url=url,headers=headers)
	html = res.json()
	download(html) # 写入文件
	if count<=10:  # 在这里小编只写了10个url,各位小伙伴可以自行调节
		time.sleep(1)  # 避免爬取速度过快,稍微停下
		print(f"{count}下载完成")
		next_max_id = html["max_id"] 
		# 从第二个url开始后,所有的url的形式如同下面一致
		new_url = f"https://weibo.com/ajax/statuses/buildComments?flow=0&is_reload=1&id=4762132170410005&is_show_bulletin=2&is_mix=0&max_id={next_max_id}&count=20&uid=5993531560"
		get_comment(new_url)


if __name__=='__main__':
	count = 0  # 记录获取多少个评论URL
	fp = open('a.txt','a',encoding="utf-8") # 利用txt文件写入即可
	# 初始URL
	url = 'https://weibo.com/ajax/statuses/buildComments?is_reload=1&id=4762132170410005&is_show_bulletin=2&is_mix=0&count=10&uid=5993531560'
	get_comment(url) # 程序开始
	fp.close() # 文件写入完毕
4、分析评论

为了避免被微博禁止爬取数据,我们少爬取点数据,10页就行。
在这里,我们仅仅只做了10页248条数据的词云分析,仅供大家观看。

5、结束语

以上所有内容仅供学习使用,切莫用来“干坏事”。如果有什么问题,可以在评论区回复,小编看到后会及时做出回复。如果想转发,请说明转发地址。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/741398.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-28
下一篇 2022-04-28

发表评论

登录后才能评论

评论列表(0条)

保存