利用selenium爬取《西虹市首富影评》

news/2024/10/17 16:26:33/

640?wx_fmt=png

目标网址:豆瓣网

'https://movie.douban.com/subject/27605698/comments?status=P'

使用工具:python+selenium

首先,很简单的,我们得使用selenium的webdriver去打开网址,自动实现打开网页,并且翻页:

selenium环境确保搭建完毕(如果没有搭建好,公众号python乱炖回复:selenium)

那我们就开始吧!

我们的目标网址:

url = 'https://movie.douban.com/subject/27605698/comments?status=P'

首先将selenium的webdriver导入:

from selenium import webdriver

然后使用webdriver打开浏览器:

browser = webdriver.Chrome()

打开网址:

browser.get(url)

这样就简单的打开网址了。

640?wx_fmt=png

但是只能看到20条,如果想看到后面的,就必须进行翻页,这个时候,我们就需要进行元素定位了

我们打开网页,查看翻页元素的位置:

640?wx_fmt=png

经过审查元素,我们发现,“后页”这个点击的其实是隶属于一个id=“paginator”的div标签里的a标签,所以我们可以使用简单的xpath来进行定位就可以了:

"//*[@id='paginator']/a"

先找到id=“paginator”,这样就可以定位到这个a标签了。

然后我们加入代码:

browser.find_element_by_xpath("//*[@id='paginator']/a").click()

(加个while循环,因为要翻多页)

但是我们发现操作结果,只操作了一次就停在第二页不动了,这是为什么呢?

640?wx_fmt=png

我们检查一下页面的元素:

640?wx_fmt=png

我们发现,这个div标签里竟然三个都变成的a标签,怪不得我们刚才的代码不管用了!

这个时候我们只需要取第三个标签,我们使用xpath取a的第三个元素a[3]就够啦:

browser.find_element_by_xpath("//*[@id='paginator']/a[3]").click()

这样和上面第一页的代码整合起来写就是:

i = 1

while True:

    if i==1:

        browser.find_element_by_xpath("//*[@id='paginator']/a").click()

    else:

        browser.find_element_by_xpath("//*[@id='paginator']/a[3]").click()

        browser.implicitly_wait(10)

        time.sleep(1) # 暂停1秒

        i = i + 1

这样我们就能让页面翻到最后一页啦!

我们试试看!

640?wx_fmt=png

出问题了!

我们发现读取到11页的时候就死在那了,不能再往后跳了,到底是什么问题!

之后我就自己去翻豆瓣,结果发现也是一样的,看来不是代码的问题。

一段时间后......

一柱香后.......

一觉之后.........

发现问题了,原来是没登录导致的无法查看。

那就意味着我们就要开始自动登录豆瓣了哦!

首先打开登录页进行登录,登录完切换到评论页,获取评论。

登录的loginurl:https://www.douban.com/


loginurl='https://www.douban.com/'

browser = webdriver.Chrome()

browser.get(loginurl)

打开登录页之后我们需要输入用户名和密码,审查一下输入框的元素:

640?wx_fmt=png

640?wx_fmt=png

看到了元素的id之后我们就可以获取他们并且传值了:

# 获取用户名输入框,并先清空

browser.find_element_by_name('form_email').clear() 

# 输入用户名

browser.find_element_by_name('form_email').send_keys(u'25xxxx@qq.com') 

# 获取密码框,并清空

browser.find_element_by_name('form_password').clear()  

# 输入密码

browser.find_element_by_name('form_password').send_keys(u'xxxxxx') 

然后点击提交就可以了:

browser.find_element_by_css_selector('input[class="bn-submit"]').click()

但是我们发现,就这样点击提交是无法登陆的,因为它还会跳出一个验证码,必须要把这个验证码输进去才能登陆。

这就很烦了,先不管了,手动输入吧,后面有空再去识别这个验证码。

那我们就看着网页,在验证码的框输入验证码:

captcha_code = input('Input code:')

browser.find_element_by_id('captcha_field').send_keys(captcha_code)

这样就可以了。

这样我们就能顺利爬取所有的评论了,我们现在只需要把每个页面上的评论保存下来即可:

这里我们为了保证格式工整,我们把评论做成表的形式,可以借用一下pandas的DataFrame这样一个数据格式,之后再保存为csv,所以需要导入pandas。

那么第一步,去页面检索评论的元素样式:

640?wx_fmt=png

接下来我们提取内容了:

利用apply方法,将数据加入到DataFrame里。

AllComments = pd.DataFrame()

s = browser.find_elements_by_class_name('comment-item')

articles = pd.DataFrame(s,columns = ['web'])

articles['uesr'] = articles.web.apply(lambda x:x.find_element_by_tag_name('a').get_attribute('title'))

articles['comment'] = articles.web.apply(lambda x:x.find_element_by_class_name('short').text)

articles['star'] = articles.web.apply(lambda x:x.find_element_by_xpath("//*[@id='comments']/div[1]/div[2]/h3/span[2]/span[2]").get_attribute('title'))

articles['date'] = articles.web.apply(lambda x:x.find_element_by_class_name('comment-time').get_attribute('title'))

articles['vote'] = articles.web.apply(lambda x:np.int(x.find_element_by_class_name('votes').text))

del articles['web']

AllComments = pd.concat([AllComments,articles],axis = 0)

print ('The ' + str(i) + ' page finished!')

提取的时候要把它放到while循环里,保证每页都提取到。

提取完了之后,我们把最后的数据保存到csv里面:

result.to_csv('C:\\Users\\yuqing.wu\\Downloads\\yuqing.csv',index=False,header=False)

640?wx_fmt=png

代码:

640?wx_fmt=png

完整代码见阅读原文。

640?wx_fmt=jpeg

求关注!


http://www.ppmy.cn/news/829175.html

相关文章

全球富豪大洗牌!马斯克登顶世界首富,黄铮国内第三超马云

整理 | 王晓曼 出品 | 程序人生 (ID:coder _life) 3 月 2 日,胡润研究院发布《2021 胡润全球富豪榜》,特斯拉 CEO 埃隆马斯克以 1.28 万亿元人民币的身价,首次成为世界首富。中国企业家、农夫山泉创始人钟睒…

谁是中国首富?

第一名毫无疑问是阿里巴巴创始人马云先生。马云1999年创立阿里巴巴,带领阿里巴巴于2007年香港联交所主板上市,随后香港联交所退市后于2014年9月19号,带领阿里巴巴在纽交所上市,马云持有阿里巴巴约7%的股份,财富2387.4亿…

《西虹市首富》带来的除了欢笑,还有什么?作为互联网人的思考

周末去看了《西虹市首富》,冲着开心麻花去的,现在开心麻花知名度越来越高,也逐渐已经成为喜剧电影口碑的象征之一了。回到电影本身,情节设计虽然有些繁缛,但是笑点还是挺足的,推荐有时间可以去看看。 一、一…

中国首富“叒”换人了

本文转载自腾讯网 4月1日,腾讯控股董事长马化腾反超农夫山泉创始人钟睒睒成为中国新首富。 根据福布斯实时数据榜披露数据,马化腾目前身家为634亿美元,在世界首富榜单排名第16位,位于沃尔玛创始人独生女爱丽丝沃尔顿之后&#x…

西虹市首富:在币圈赔光10亿的一万种办法

昨天我去看了《西虹市首富》。 作为一部喜剧片嘛,算是合格了。满分10分,我给他打6分。 其中给女主3分,真的美。王力宏3分。 正片0分。 为什么给0分。 我说了,作为喜剧片,他合格了。整场电影笑的我合不拢腿。喝着肥…

往期精彩,爬取10亿票房的《西虹市首富》热评,一起来解读吧!

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 本文章来自腾讯云 作者:Python进阶者 想要学习Python?有问题得不到第一时间解决?来看看这里“1039649593”满足你的需…

《西虹市首富》文章相关代码分享

上一篇关于电影《西虹市首富》的评论分析文章(原文链接: 之前也得到了一些读者的反馈,有些城市的经纬度在pyechart包中无法找到,此次我们已经将这部分数据剔除,感谢大家与我们的互动。 本文详细代码如下: &…