当前位置: 首页 > 后端技术 > Python

Python爬取“微博树洞”详解教程

时间:2023-03-26 12:56:49 Python

最近在做一个关于从微博等短文本数据自动判断一个人是否有自杀倾向的项目,需要先搜集。微博或短文本数据作为训练集。其实这样的数据是比较难找的,尤其像我这种需求量比较大的项目。不过好在最后找到了突破口:“微博树洞”。“微博树洞”指的是死者宣布自杀的微博。它的留言区已经成为成千上万郁闷或绝望之人的家园,下面贴满了很多负能量甚至寻死的留言。宣言。比如走饭的微博:1.找到微博评论数据接口微博评论的数据接口有两种,一种是手机版,一种是PC版。手机版能爬取的数据只有十五页,那我们就从PC版开始,看看PC版的界面怎么找,长什么样子。首先在当前微博页面右击—勾选(F12)打开开发者工具,然后按照下图步骤操作(选择NetWork—选择XHR—点击其他评论页—勾选右边的新请求):然后我们看新添加的request,你会发现在Preview中可以看到格式化的数据,里面有一个html。仔细观察html,会发现这是评论列表的数据。我们只需要解析出这个html。查看get请求的url:https://weibo.com/aj/v6/comment/big?ajwvr=6&id=3424883176420210&page=2&__rnd=1573219876141ajwvr固定值为6,id指的是微博id其中page是评论页面,_rnd是请求的毫秒时间戳。但是微博需要登录才能查看更多评论,所以我们需要先访问微博获取cookie值,然后才能开始爬取。2.写爬虫关注文章底部Python实战书,回复微博评论爬虫即可获取本项目完整源码。设置四个参数:params={'ajwvr':6,'id':'3424883176420210','page':1,'_rnd':int(round(time.time()*1000))}setcookie:headers={'X-Requested-With':'XMLHttpRequest','Cookie':'你的微博cookie',}发送请求并解析数据URL='https://weibo.com/aj/v6/comment/big'fornuminrange(1,51,1):print(f'==============爬取页面{num}====================')params['page']=numparams['_rnd']=int(round(time.time()*1000))resp=requests.get(URL,params=params,headers=headers)resp=json.loads(resp.text)在这一串HTML中解析出我们需要的数据,这里用到了XPATH,如果你还不知道XPATH,可以看这篇文章:学XPath,爬虫利器,它ifresp['code']=='100000':html=resp['data']['html']html=etree.HTML(html)data=html.xpath('//div[@node-type="comment_list"]')foriindata:#commenternicknamenick_name=i.xpath('.//div[@class="WB_text"]/a[1]/text()')#评论Contenttext=i.xpath('.//div[@class="WB_text"]')text=[i.xpath('string(.)')foriintext]#头像地址.xpic_purl('.//div[@class="WB_faceW_fl"]/a/img/@src')print(len(nick_name),len(text),len(pic_url))write_comment([i.strip()foriintext],pic_url,nick_name)写入文件和下载图片的函数如下:#下载图片defdownload_pic(url,nick_name):ifnoturl:returnifnotos.path.exists(pic_file_path):操作系统。mkdir(pic_file_path)resp=requests.get(url)如果resp.status_code==200:withopen(pic_file_path+f'/{nick_name}.jpg','wb')asf:f.write(resp.content)#写入消息内容defwrite_comment(comment,pic_url,nick_name):f=open('comment.txt','a',encoding='utf-8')forindex,iinenumerate(comment):if':'notiniand'reply'notiniandi!='':#删除评论的评论w_comment=i.strip().replace(':','').replace('n','')#写评论f.write(w_comment.replace('etal','').replace('图片评论','')+'n')#获取头像download_pic(pic_url[index],nick_name[index])以上是我们使用的代码。Python实战书公众号中可以后台回复微博评论爬虫下载完整源码(附手机版爬虫)。3、时序爬虫即便如此,我们拿到的数据还是不够的。PC版微博评论页只支持爬到第50页,51页之后就无法获取到数据,如图:不过,go回复范微博的人真的很多,而且里面的数据一天差不多50页。我们每天定时抓取50个页面就可以得到数据。linux系统可以使用crontab定时脚本,windows系统可以通过定时任务来实现。这里我们就说一下crontab的实现方法。假设你的Python存放在/usr/bin/,脚本名为weibo.py,存放在home,在终端输入crontab-e后,在最后添加这条语句:00***/usr/bin/python/home/weibo.py在公众号后台回复微博评论爬虫即可下载本文完整源码(附手机版爬虫)。如果喜欢今天的Python教程,请继续关注Python实战宝典。如果对您有帮助,请在下方点赞/观看。有什么问题可以在下方评论区留言,我们会耐心解答!Python实战宝典(pythondict.com)不只是一个合集欢迎关注公众号:Python实战宝典