最近很火的数据动图python_10分钟用Python爬取最近很火的复联4影评

本文介绍了一个简单的Python爬虫,用于抓取豆瓣电影《复仇者联盟4:终局之战》的短评。通过requests模块获取HTML页面,再利用BeautifulSoup解析HTML,提取出class为'short'的影评内容。爬虫设计为每页抓取20条评论,共爬取前5页,即100条评论。代码清晰易懂,适合初学者学习。
摘要由CSDN通过智能技术生成

欲直接下载代码文件,关注我们的公众号哦!查看历史消息即可!

1240

《复仇者联盟4:终局之战》已经上映快三个星期了,全球票房破24亿美元,国内票房破40亿人民币。

虽然现在热度逐渐下降,但是我们还是恬不知耻地来蹭一蹭热度。上映伊始《复联4》的豆瓣评分曾破了9分。

后来持续走低,现在《复联4》的评分稳定在8.6分。虽然豆瓣日常被人吐槽注水严重,恶意评分很多,但是由于它好爬鸭~,我们还是选择豆瓣作为爬取对象。豆瓣的长评论有文字和图片等其它元素,简单起见,这次只爬短评。

在浏览器中查看豆瓣关于复联4的短评,先来看看url的结构:

可见,我们可以通过修改start的值进入不同的页面:

1240

右键查看源代码可以看到浏览器获取到的html页面代码。Ctrl F搜索第一条影评的关键词,快速定位到影评的标签:

1240

可以看到影评内容在span标签中,class为“short”。

总览一下爬取内容的步骤:

访问url,获取html页面文本,这一步我们要用到的是requests模块。

解析返回的文本,提取出爬虫内容,这一步要用的是beautifulSoup模块。

这两个模块都可以通过pip直接下载。

首先是main函数:

def main():

discuss = []

a = 0

for i in range(0,100,20):

url = 'https://movie.douban.com/subject/26100958/comments?start='+ str(i) +'&limit=20&sort=new_score&status=P'

HTMLpage = getHTML(url)

#print(HTMLpage)

for t in parseHTML(HTMLpage):

discuss.append(t)

for i in discuss:

print(str(a) + ':' + i)

# print(i)

a = a + 1

由于豆瓣一页显示20条影评,我们爬前100条,所以这里访问了前5个页面:

def getHTML(url):

try:

r = requests.get(url)

r.raise_for_status()

print("get html successfully")

r.encoding = 'utf-8'

#print(r.text)

return r.text

except:

return ""

在getHTML函数中,我们申请访问目标页面,并返回html页面文本。注意这里应该将编码方式设置为utf-8,实测如果设置成r.encoding = r.apparent_encoding,程序并不能猜测到正确的编码方式。

当r.raise_for_status() 没有抛出异常时,程序通知我们获取html成功。如果有异常,返回空字符串。

下一步是解析:

如前所述影评是class为short的span,所以可以直接使用bs4的find_all()函数得到一个含有所有影评的tag的列表。我们只需要把tag中的文字提取出来就可以返回到主函数了。

首先要生成一个beautifulSoup类的对象,使用html的解析器。html页面是树状分布的,可以通过各种树的遍历找到我们需要的标签,这里bs4提供了一个简单粗暴的find_all,可以直接使用。

find_all()函数返回的是一个保存着tag的列表。

def parseHTML(html):

try:

soup = BeautifulSoup(html,"html.parser")

A = soup.find_all('span',attrs = {'class':'short'})

B = []

for i in A:

B.append(i.get_text())

return B

except:

return []

用get_text函数去掉span标签,只留下内容的文本,加入到B列表里。然后就可以返回了。同理,如果出错了,返回空列表。

好了以上就是一个非常简单的小爬虫,通过修改爬取的数量可以爬取任意页面的评论。当然了后续还会对这些数据进行一些有趣的分析,请关注我们。同时因为作者本人能力有限,本系列可能又要无限托更了/呲牙

下附完整版代码和运行结果【代码下载移步留言区】:

import requests

from bs4 import BeautifulSoup

def getHTML(url):

try:

r = requests.get(url)

r.raise_for_status()

print("get html successfully")

r.encoding = 'utf-8'

#print(r.text)

return r.text

except:

return ""

def parseHTML(html):

try:

soup = BeautifulSoup(html,"html.parser")

A = soup.find_all('span',attrs = {'class':'short'})

B = []

for i in A:

B.append(i.get_text())

return B

except:

return []

def main():

discuss = []

a = 0

for i in range(0,100,20):

url = 'https://movie.douban.com/subject/26100958/comments?start='+ str(i) +'&limit=20&sort=new_score&status=P'

HTMLpage = getHTML(url)

#print(HTMLpage)

for t in parseHTML(HTMLpage):

discuss.append(t)

for i in discuss:

print(str(a) + ':' + i)

# print(i)

a = a + 1

if __name__ == "__main__":

main()

运行结果:

1240

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值