select 移动端 第一个无法选中_Python爬虫微博(移动端)评论
发布日期:2021-06-24 11:28:03
浏览次数:4
分类:技术文章
本文共 2699 字,大约阅读时间需要 8 分钟。
(*---封面图片是2020春夏之交拍的,彼时风光明媚,现在2020年的岁末,在这种清冷之中偶然瞥见,不禁为岁月的流逝和季节的巡回而动容,记忆带我时空错落了---*)
——133号——
为了分析的目的,有时候需要了解公众对特定问题或现象的看法,一种可行的方案是从新浪微博上,抓取特定文章所引起的公众讨论信息。微博有三种显示页面,其中移动端的显示页面最为简单,浏览起来不是很方便,但却是最容易利用Python爬虫抓取数据的。 移动端网址:https://weibo.cn/ 界面显示为: 下面就以“人民日报”发布的某一条微博为案例,抓取该微博下面的评论。打开该微博的评论列表,并分析列表的url特征,用于连续爬取翻页数据: https://weibo.cn/comment/hot/It6vvtD94?rl=1&oid=4470428665664743&page=1 https://weibo.cn/comment/hot/It6vvtD94?rl=1&oid=4470428665664743&page=2 …… 从上面就可以看出,通过url末尾的page=1(2,3,4……)实现翻页,基于这个特征就可以构建一个循环,连续爬取页面了,代码为:urls = ['https://weibo.cn/comment/hot/It6vvtD94?rl=1&oid=4470428665664743&page={}'.format(str(i)) for i in range(1,4)]
这里设置了4次循环,即for i in range(1,4),format(str(i))会将i转化为字符串传递到前面的{}中,从而构建出每一个页面的url,爬取时只需要从url里面依次读取每一个url就可以了。
当然,在打开移动端页面时,还需要登录,输入自己的用户名和密码,后面我们就可以通过“检查”页面,在“Network”里面刷新页面,选择“ALL/XHR/JS/CSS……”等,在headers里面的request headers里面,获取到自己浏览器的user-agent、authority、accept、accept-language、cookie等信息,这里面尤其以user-agent和cookie最为重要,如下图所示: 下面就是利用Python编写的抓取页面评论的程序:#载入需要用到的库import requestsfrom bs4 import BeautifulSoupimport timeimport pandas as pd#构建模型浏览器的headersheaders={ 'User-agent':'粘贴自己浏览器的user-agent', 'authority':'weibo.cn', 'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9', 'Accept-Language':'zh-CN,zh;q=0.9', 'Accept-Encoding':'gzip,deflate,br', 'Cookie':'粘贴自己浏览器的cookie', 'DNT':'1', 'Connection':'keep-alive'}urls = ['https://weibo.cn/comment/hot/It6vvtD94?rl=1&oid=4470428665664743&page={}'.format(str(i)) for i in range(1,4)]#定义两个存储日期和评论的列表datelist,commentlist=[],[]page=0#从urls中依次读取每一个url,然后爬取,并将内容存储在两个列表中for url in urls: page=page+1 print("***准备爬取第{}页,网址为:".format(page),url) wb_data=requests.get(url,headers=headers) #print(wb_data.status_code) soup = BeautifulSoup(wb_data.text, 'lxml') comments = soup.select('span.ctt') dates=soup.select('span.ct') #提取我们需要的数据 for date,comment in zip(dates,comments): datelist.append(date.get_text().split(' ')[0]) commentlist.append(comment.get_text()) print("【日期】",date.get_text().split(' ')[0],"\n【评论】",comment.get_text()) #暂停3秒后再进行下一个循环,免得被察觉封号 time.sleep(3)#将列表里面的内容写入到csv数据库中result1 = pd.DataFrame({ "date": datelist, "comment": commentlist}, columns=['date', 'comment'])result1.to_csv("weibo.csv", index=False)
上面代码运行的结果存储在weibo.csv这个数据文件里面,并在pycharm里面显示爬取的进度情况,如下图:
上面的代码存在的一个问题是,不能爬取评论下面的二级评论,在移动端的页面上,我也没有找到二级评论的入口。不过每一个页面显示10条评论,总共14601页,似乎所有的页面就可以穷尽所有的评论了。
移动端存在的另一个问题是,当翻页到一定的程度后,比如到150页的时候,后面再新翻的页面显示的内容居然是一样的,不知道这个问题出在什么地方。这个问题,希望后面在学习爬取手机端之后可以得到解决,就留待下次再总结吧。
~End~转载地址:https://blog.csdn.net/weixin_32503531/article/details/112276269 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2024年04月26日 22时40分45秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Unity iOS接SDK,定制UnityAppController
2019-04-27
Unity iOS接SDK前先要了解的知识(Objective-C)
2019-04-27
记一次iOS闪退问题的定位:NSLog闪退
2019-04-27
Unity打开照相机与打开本地相册然后在Unity中显示照片(Android与iOS)
2019-04-27
无需接入SDK即可在Unity中获取经纬度(Android/iOS),告诉我你的坐标
2019-04-27
Unity获取系统信息SystemInfo(CPU、显卡、操作系统等信息)
2019-04-27
Unity中获取物体的尺寸(size)的三种方法
2019-04-27
Unity中的关节组件和绳子效果的实现
2019-04-27
Unity可视化编程插件: Bolt,可以像UE4的蓝图那样啦
2019-04-27
Android的.dex、.odex与.oat文件扫盲
2019-04-27
Unity移动应用如何在Bugly上查看崩溃堆栈
2019-04-27
unity3D 在屏幕边框创建碰撞框
2019-04-27
xml中常用的转义符
2019-04-27
关于MSDK的几个难点
2019-04-27
使用UnityEditor做工具
2019-04-27
Visual Studio我常用的快捷键
2019-04-27
写C# dll供Unity调用
2019-04-27
Linux制作run安装包
2019-04-27