select 移动端 第一个无法选中_Python爬虫微博(移动端)评论

ae05b313c3443d2f4b3d03629864c5c6.gif

(*---封面图片是2020春夏之交拍的,彼时风光明媚,现在2020年的岁末,在这种清冷之中偶然瞥见,不禁为岁月的流逝和季节的巡回而动容,记忆带我时空错落了---*)

——133号——

为了分析的目的,有时候需要了解公众对特定问题或现象的看法,一种可行的方案是从新浪微博上,抓取特定文章所引起的公众讨论信息。微博有三种显示页面,其中移动端的显示页面最为简单,浏览起来不是很方便,但却是最容易利用Python爬虫抓取数据的。 移动端网址:https://weibo.cn/ 界面显示为:

d581a1ffff4156288ccfda1dcc2f491c.png

下面就以“人民日报”发布的某一条微博为案例,抓取该微博下面的评论。打开该微博的评论列表,并分析列表的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最为重要,如下图所示:

10ac96f772c61cb6dbf73a1362a55f5c.png

下面就是利用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里面显示爬取的进度情况,如下图:

cf1819eaa498a3190da9986d8404137b.png

上面的代码存在的一个问题是,不能爬取评论下面的二级评论,在移动端的页面上,我也没有找到二级评论的入口。不过每一个页面显示10条评论,总共14601页,似乎所有的页面就可以穷尽所有的评论了。

移动端存在的另一个问题是,当翻页到一定的程度后,比如到150页的时候,后面再新翻的页面显示的内容居然是一样的,不知道这个问题出在什么地方。这个问题,希望后面在学习爬取手机端之后可以得到解决,就留待下次再总结吧。

~End~

c3fdb90ff6d9f194a04f76725b2d0301.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值