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



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

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

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

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

https://movie.douban.com/subject/26100958/comments?start=20&limit=20&sort=new_score&status=P

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

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

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

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

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

  2. 解析返回的文本,提取出爬虫内容,这一步要用的是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()

运行结果:

10分钟用Python爬取最近很火的复联4影评的更多相关文章

  1. python爬取网站数据

    开学前接了一个任务,内容是从网上爬取特定属性的数据.正好之前学了python,练练手. 编码问题 因为涉及到中文,所以必然地涉及到了编码的问题,这一次借这个机会算是彻底搞清楚了. 问题要从文字的编码讲 ...

  2. python爬取网站数据保存使用的方法

    这篇文章主要介绍了使用Python从网上爬取特定属性数据保存的方法,其中解决了编码问题和如何使用正则匹配数据的方法,详情看下文     编码问题因为涉及到中文,所以必然地涉及到了编码的问题,这一次借这 ...

  3. python爬取快手视频 多线程下载

    就是为了兴趣才搞的这个,ok 废话不多说 直接开始. 环境: python 2.7 + win10 工具:fiddler postman 安卓模拟器 首先,打开fiddler,fiddler作为htt ...

  4. python 爬取王者荣耀高清壁纸

    代码地址如下:http://www.demodashi.com/demo/13104.html 一.前言 打过王者的童鞋一般都会喜欢里边设计出来的英雄吧,特别想把王者荣耀的英雄的高清图片当成电脑桌面 ...

  5. 利用python爬取58同城简历数据

    利用python爬取58同城简历数据 利用python爬取58同城简历数据 最近接到一个工作,需要获取58同城上面的简历信息(http://gz.58.com/qzyewu/).最开始想到是用pyth ...

  6. Python爬取视频指南

    摘自:https://www.jianshu.com/p/9ca86becd86d 前言 前两天尔羽说让我爬一下菜鸟窝的教程视频,这次就跟大家来说说Python爬取视频的经验 正文 https://w ...

  7. 用Python爬取B站、腾讯视频、爱奇艺和芒果TV视频弹幕!

    众所周知,弹幕,即在网络上观看视频时弹出的评论性字幕.不知道大家看视频的时候会不会点开弹幕,于我而言,弹幕是视频内容的良好补充,是一个组织良好的评论序列.通过分析弹幕,我们可以快速洞察广大观众对于视频 ...

  8. Python爬取跑男的评论,看看大家都在看谁吧

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章来源于菜J学Python,作者: J哥 Python爬取爬取腾讯视频弹幕视频讲解 http ...

  9. python爬取微信小程序(实战篇)

    python爬取微信小程序(实战篇) 本文链接:https://blog.csdn.net/HeyShHeyou/article/details/90452656 展开 一.背景介绍 近期有需求需要抓 ...

随机推荐

  1. PyTorch工具

    以装饰器添加所有代码对应的tensor的信息 https://github.com/zasdfgbnm/TorchSnooper

  2. npm/svn 命令

    npm npm config set registry https://registry.npm.taobao.org npm config list svn + 清除失败的事务 - cmd管理员运行 ...

  3. MySql 严格模式相关配置

    目录 MySql 严格模式 MySQL的sql_mode合理设置 sql model 常用来解决下面几类问题 sql_mode常用值 注意 改为严格模式后可能会存在的问题 模式设置和修改(以解决上述问 ...

  4. sql强大的行转列功能(内置函数pivot及注意事项)

    语法: PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PIVOT(聚合函数(列) FOR 列 in (…) ) ...

  5. django后台xadmin如下配置(小结)

    django-admin文档:https://xadmin.readthedocs.io/en/latest/index.html目录: 1.xadmin基本配置 2.配置后台显示的模型类 3.后台注 ...

  6. 解决 Jumpserver coco 使用登录用户(ldap)进行SSH连接目标主机,忽略系统用户

    前言 Jumpserver 作为国内流行的开源堡垒机,很多公司都在尝试使用,同时 Jumpserver 为了契合众多公司的用户认证,也提供了 LDAP 的用户认证方式,作为 Jumpserver 的用 ...

  7. TLS 1.3 中Pre_shared_key和key_share对应的两种密钥交换模式

    1.TLS1.3的整个协议的文档规范 请参照 RFC 8846,协议规范中指出,TLS1.3提供三方面的安全属性,分别是身份认证.通信加密.完整性验证. 2.TLS1.3协议主要包括两个组成部分,分别 ...

  8. 【转】TCP之深入浅出send和recv

    本篇我们用一个测试机上的阻塞socket实例来说明主题.文章中所有图都是在测试系统上现截取的. 需要理解的3个概念 1. TCP socket的buffer 每个TCP socket在内核中都有一个发 ...

  9. Centos 7.6 双网卡绑定实现高可用

    Centos 7.6 双网卡绑定实现高可用 作者:尹正杰 版权声明:原创作品, 谢绝转载!否则将追究法律责任. 一.Bond模式概述 当linux系统上有多个单独网卡,又想充分利用这些网卡,同时对外提 ...

  10. 基于ATtiny85微控制器制作一款四通道温度计

    本文主要介绍了一款基于ATtiny85微控制器的四通道温度计,该温度计可以同时监测四个温度传感器的温度,并且实时在小型128x32 OLED液晶屏上进行显示. 该温度计可以用于任何需要监控多个温度点的 ...