12行Python暴力爬《黑豹》豆瓣短评
作者:黄嘉锋
来源:https://www.jianshu.com/p/ea0b56e3bd86
草长莺飞,转眼间又到了三月“爬虫月”。
这时往往不少童鞋写论文苦于数据获取艰难,辗转走上爬虫之路;
许多分析师做舆情监控或者竞品分析的时候,也常常使用到爬虫。
今天,本文将带领小伙伴们通过12行简单的Python代码,初窥爬虫的秘境。
爬虫目标
本文采用requests + Xpath,爬取豆瓣电影《黑豹》部分短评内容。话不多说,代码先上:
import requests; from lxml import etree; import pandas as pd; import time; import random; from tqdm import tqdmname, score, comment = [], [], []def danye_crawl(page): url = 'https://movie.douban.com/subject/6390825/comments?start=%s&limit=20&sort=new_score&status=P&percent_type='%(page*20) response = etree.HTML(requests.get(url).content.decode('utf-8')) print('\n', '第%s页评论爬取成功'%(page)) if requests.get(url).status_code == 200 else print('\n', '第%s页爬取失败'(page)) for i in range(1,21): name.append(response.xpath('//*[@id="comments"]/div[%s]/div[2]/h3/span[2]/a'%(i))[0].text) score.append(response.xpath('//*[@id="comments"]/div[%s]/div[2]/h3/span[2]/span[2]'%(i))[0].attrib['class'][7]) comment.append(response.xpath('//*[@id="comments"]/div[%s]/div[2]/p'%(i))[0].text)for i in tqdm(range(11)): danye_crawl(i); time.sleep(random.uniform(6, 9))res = pd.DataFrame({'name':name, 'score':score, 'comment':comment},columns = ['name','score','comment']); res.to_csv("豆瓣.csv")
运行以上的爬虫脚本,我们得以见证奇迹
爬虫结果与原网页内容的对比,完全一致
通过tqdm模块实现了良好的交互
工具准备
chrome浏览器(分析HTTP请求、抓包)
安装Python 3及相关模块(requests、lxml、pandas、time、random、tqdm)
requests:用来简单请求数据
lxml:比Beautiful Soup更快更强的解析库
pandas:数据处理神器
time:设置爬虫访问间隔防止被抓
random:随机数生成工具,配合time使用
tqdm:交互好工具,显示程序运行进度
基本步骤
网络请求分析
网页内容解析
数据读取存储
涉及知识点
爬虫协议
http请求分析
requests请求
Xpath语法
Python基础语法
Pandas数据处理
爬虫协议
爬虫协议即网站根目录之下的robots.txt文件,用来告知爬虫者哪些可以拿哪些不能偷,其中Crawl-delay告知了网站期望的被访问的间隔。(为了对方服务器端同学的饭碗,文明拿数据,本文将爬虫访问间隔设置为6-9秒的随机数)
豆瓣网站的爬虫协议
HTTP请求分析
使用chrome浏览器访问《黑豹》短评页面https://movie.douban.com/subject/6390825/comments?sort=new_score&status=P,按下F12,进入network面板进行网络请求的分析,通过刷新网页重新获得请求,借助chrome浏览器对请求进行筛选、分析,找到那个Ta
豆瓣短评页面请求分析
通过请求分析,我们找到了目标url为
'https://movie.douban.com/subject/6390825/comments?start=0&limit=20&sort=new_score&status=P&percent_type=',并且每次翻页,参数start将往上增加20
(通过多次翻页尝试,我们发现第11页以后需要登录才能查看,且登录状态也仅展示前500条短评。作为简单demo,本文仅对前11页内容进行爬取)
requests请求
通过requests模块发送一个get请求,用content方法获取byte型数据,并以utf-8重新编码;然后添加一个交互,判断是否成功获取到资源(状态码为200),输出获取状态
请求详情分析
(除了content,还有text方法,其返回unicode字符集,直接使用text方法遇到中文的话容易出现乱码)
Xpath语法解析
获取到数据之后,需要对网页内容进行解析,常用的工具有正则表达式、Beautiful Soup、Xpath等等;其中Xpath又快又方便。此处我们通过Xpath解析资源获取到了前220条短评的用户名、短评分数、短评内容等数据。
(可借助chrome的强大功能直接复制Xpath,Xpath语法学习http://www.runoob.com/xpath/xpath-tutorial.html)
数据处理
获取到数据之后,我们通过list构造dictionary,然后通过dictionary构造dataframe,并通过pandas模块将数据输出为csv文件
结语与彩蛋
本例通过requests+Xpath的方案,成功爬取了电影《黑豹》的部分豆瓣短评数据,为文本分析或其他数据挖掘工作打好了数据地基。
本文作为demo,仅展示了简单的爬虫流程,更多彩蛋如请求头、请求体信息获取、cookie、模拟登录、分布式爬虫等请关注后期文章更新哟。
最后,送上白话文版的代码:
import requestsfrom lxml import etreeimport pandas as pdimport timeimport randomfrom tqdm import tqdm
name, score, comment = [], [], []
def danye_crawl(page): url = 'https://movie.douban.com/subject/6390825/comments?start=%s&limit=20&sort=new_score&status=P&percent_type='%(page*20) response = requests.get(url) response = etree.HTML(response.content.decode('utf-8')) if requests.get(url).status_code == 200: print('\n', '第%s页评论爬取成功'%(page)) else: print('\n', '第%s页爬取失败'(page))
for i in range(1,21): name_list = response.xpath('//*[@id="comments"]/div[%s]/div[2]/h3/span[2]/a'%(i)) score_list = response.xpath('//*[@id="comments"]/div[%s]/div[2]/h3/span[2]/span[2]'%(i)) comment_list = response.xpath('//*[@id="comments"]/div[%s]/div[2]/p'%(i))
name_element = name_list[0].text score_element = score_list[0].attrib['class'][7] comment_element = comment_list[0].text
name.append(name_element) score.append(score_element) comment.append(comment_element)
for i in tqdm(range(11)): danye_crawl(i) time.sleep(random.uniform(6, 9))
res = {'name':name, 'score':score, 'comment':comment}res = pd.DataFrame(res, columns = ['name','score','comment'])res.to_csv("豆瓣.csv")关注【Python开发者交流平台】公众号 ,在微信后台回复【领取资源】,获取IT资源200G干货大全。
转载于:https://www.cnblogs.com/ting6/p/9725560.html
12行Python暴力爬《黑豹》豆瓣短评相关推荐
- python爬虫——Cookie登录爬取豆瓣短评和影评及常见问题
python爬虫--Cookie登录爬取豆瓣短评和影评 常见问题(本文已解决) 具体步骤 一.获取网页源码 短评.影评 二.解析网页源码及爬取评论 1.短评网页解析 ①确定位置 2.短评爬取 ①名称爬 ...
- Python爬虫入门之豆瓣短评爬取
采用工具pyCharm,python3,工具的安装在这就不多说了,之所以采用python3是因为python2只更新维护到2020年. 新建python项目 File-Settings-project ...
- python爬取豆瓣短评_爬取并简单分析豆瓣电影短评
导语 利用Python爬取并简单分析豆瓣电影短评. 说起来挺逗的,去年爬豆瓣短评的时候还是可以爬个几万条数据的,昨天我还想着终于可以起个唬人的标题了,什么爬取了xxx电影的xxx万条数据. 于是昨晚写 ...
- python爬取豆瓣短评_爬虫-爬取豆瓣短评
爬虫-爬取豆瓣短评 啥是爬虫? 按照一定的规则,自动地抓取互联网信息的程序. 为啥要用爬虫? 可以利用爬虫自动地采集互联网中的信息,采集回来后进行相应的存储或处理,在需要检索某些信息的时候,只需在 ...
- 详解使用Python爬取豆瓣短评并绘制词云
使用Python爬取豆瓣短评并绘制词云 成果如下(比较丑,凑合看) 1.分析网页 打开想要爬取的电影,比如<找到你>,其短评如下: 查看源代码 发现短评存放在<span>标签里 ...
- Python - 爬取豆瓣短评评论
Python - 爬取豆瓣短评评论 import requests from bs4 import BeautifulSoup import re import time# 保存豆瓣评分 source ...
- 入门爬虫示例-爬取豆瓣短评
群里有个小妹妹,让我帮她写的代码,好像是作业什么的.花了几分钟看了一下,随便写写,分享给有需要的童鞋,我用python 3 写的,实现的功能就是:爬取豆瓣短评,然后将数据写入本地的excel表格,数据 ...
- 2.Request爬取豆瓣短评
使用Requests爬取豆瓣短评 Python爬虫(入门+进阶) DC学院 本节课程的内容是介绍什么是Requests库.如何安装Requests库以及如何使用Requests库进行实际运用. Req ...
- Python爬虫 爬取豆瓣电影TOP250
Python爬虫 爬取豆瓣电影TOP250 最近在b站上学习了一下python的爬虫,实践爬取豆瓣的电影top250,现在对这两天的学习进行一下总结 主要分为三步: 爬取豆瓣top250的网页,并通过 ...
最新文章
- 2021-01-16交叉熵损失函数比均方误差损失函数优点在哪里
- 一致性hash算法_分布式寻址算法
- 很高兴加入 英文_少和外国人说quot;You look youngquot;,她们可能会不高兴!
- qt之键盘的设计及QlineEdit内容读取
- Java 捕获 mybatis异常_3 springboot集成mybatis和全局异常捕获
- thinkphp中mysql添加数据_thinkphp添加数据 add()方法
- 编写让别人能够读懂的代码
- wpf datagrid 数据为null时 显示背景图_[C#.NET 拾遗补漏]09:数据标注与数据校验
- Hibernate many-to-many
- ORB_SLAM3_一张图说明ORB-SLAM中的ORB特征提取和图像匹配算法流程
- iOS 关于本地持久化存储的探讨
- 纪念非线性光学诞生:Peter Franken和非线性光学
- 【Java 8 新特性】Java Map compute() 示例 | 指定 key 的值进行计算后替换
- ADV-234-字符串跳步
- 安防监控、智慧交通 视频结构化(车辆+行人)实现方案
- 关于log4j:WARN No appenders could be found for logger (org.apache.hadoop.metrics2.lib.MutableMetricsFa
- 记一个跟阿里的朋友喝酒的周末-20211201
- Linux内核中的IPSEC实现(3) ---转载
- 圆透视变换为椭圆,其缩放比例如何求?
- 美国探亲签证面签时一定要用英语吗?
热门文章
- 两台服务器身份验证,OAuth 2 从入门到精通(一) - 身份认证服务器
- python去重计数_Python list去重及找出,统计重复项
- android studio左边选择渠道,AndroidStudio简单使用(二):左侧Structure
- OpenCV-Python实战(3)——OpenCV中绘制图形与文本
- java 8流在另一个流_Java 8流图
- C语言基础教程篇之作用域规则
- MySQL常见面试题,阿⾥校招面试题
- linux命令(56):环境变量:/etc/profile、/etc/bashrc 、~/.profile、~/.bashrc
- 玩转Bootstrap(JS插件篇)-第1章 模态弹出框 :1-2 动画过渡
- PS替换图片图标操作