作者:黄嘉锋

来源: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:交互好工具,显示程序运行进度

基本步骤


  1. 网络请求分析

  2. 网页内容解析

  3. 数据读取存储

涉及知识点

  • 爬虫协议

  • 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暴力爬《黑豹》豆瓣短评相关推荐

  1. python爬虫——Cookie登录爬取豆瓣短评和影评及常见问题

    python爬虫--Cookie登录爬取豆瓣短评和影评 常见问题(本文已解决) 具体步骤 一.获取网页源码 短评.影评 二.解析网页源码及爬取评论 1.短评网页解析 ①确定位置 2.短评爬取 ①名称爬 ...

  2. Python爬虫入门之豆瓣短评爬取

    采用工具pyCharm,python3,工具的安装在这就不多说了,之所以采用python3是因为python2只更新维护到2020年. 新建python项目 File-Settings-project ...

  3. python爬取豆瓣短评_爬取并简单分析豆瓣电影短评

    导语 利用Python爬取并简单分析豆瓣电影短评. 说起来挺逗的,去年爬豆瓣短评的时候还是可以爬个几万条数据的,昨天我还想着终于可以起个唬人的标题了,什么爬取了xxx电影的xxx万条数据. 于是昨晚写 ...

  4. python爬取豆瓣短评_爬虫-爬取豆瓣短评

    爬虫-爬取豆瓣短评 啥是爬虫? ​按照一定的规则,自动地抓取互联网信息的程序. 为啥要用爬虫? ​可以利用爬虫自动地采集互联网中的信息,采集回来后进行相应的存储或处理,在需要检索某些信息的时候,只需在 ...

  5. 详解使用Python爬取豆瓣短评并绘制词云

    使用Python爬取豆瓣短评并绘制词云 成果如下(比较丑,凑合看) 1.分析网页 打开想要爬取的电影,比如<找到你>,其短评如下: 查看源代码 发现短评存放在<span>标签里 ...

  6. Python - 爬取豆瓣短评评论

    Python - 爬取豆瓣短评评论 import requests from bs4 import BeautifulSoup import re import time# 保存豆瓣评分 source ...

  7. 入门爬虫示例-爬取豆瓣短评

    群里有个小妹妹,让我帮她写的代码,好像是作业什么的.花了几分钟看了一下,随便写写,分享给有需要的童鞋,我用python 3 写的,实现的功能就是:爬取豆瓣短评,然后将数据写入本地的excel表格,数据 ...

  8. 2.Request爬取豆瓣短评

    使用Requests爬取豆瓣短评 Python爬虫(入门+进阶) DC学院 本节课程的内容是介绍什么是Requests库.如何安装Requests库以及如何使用Requests库进行实际运用. Req ...

  9. Python爬虫 爬取豆瓣电影TOP250

    Python爬虫 爬取豆瓣电影TOP250 最近在b站上学习了一下python的爬虫,实践爬取豆瓣的电影top250,现在对这两天的学习进行一下总结 主要分为三步: 爬取豆瓣top250的网页,并通过 ...

最新文章

  1. 2021-01-16交叉熵损失函数比均方误差损失函数优点在哪里
  2. 一致性hash算法_分布式寻址算法
  3. 很高兴加入 英文_少和外国人说quot;You look youngquot;,她们可能会不高兴!
  4. qt之键盘的设计及QlineEdit内容读取
  5. Java 捕获 mybatis异常_3 springboot集成mybatis和全局异常捕获
  6. thinkphp中mysql添加数据_thinkphp添加数据 add()方法
  7. 编写让别人能够读懂的代码
  8. wpf datagrid 数据为null时 显示背景图_[C#.NET 拾遗补漏]09:数据标注与数据校验
  9. Hibernate many-to-many
  10. ORB_SLAM3_一张图说明ORB-SLAM中的ORB特征提取和图像匹配算法流程
  11. iOS 关于本地持久化存储的探讨
  12. 纪念非线性光学诞生:Peter Franken和非线性光学
  13. 【Java 8 新特性】Java Map compute() 示例 | 指定 key 的值进行计算后替换
  14. ADV-234-字符串跳步
  15. 安防监控、智慧交通 视频结构化(车辆+行人)实现方案
  16. 关于log4j:WARN No appenders could be found for logger (org.apache.hadoop.metrics2.lib.MutableMetricsFa
  17. 记一个跟阿里的朋友喝酒的周末-20211201
  18. Linux内核中的IPSEC实现(3) ---转载
  19. 圆透视变换为椭圆,其缩放比例如何求?
  20. 美国探亲签证面签时一定要用英语吗?

热门文章

  1. 两台服务器身份验证,OAuth 2 从入门到精通(一) - 身份认证服务器
  2. python去重计数_Python list去重及找出,统计重复项
  3. android studio左边选择渠道,AndroidStudio简单使用(二):左侧Structure
  4. OpenCV-Python实战(3)——OpenCV中绘制图形与文本
  5. java 8流在另一个流_Java 8流图
  6. C语言基础教程篇之作用域规则
  7. MySQL常见面试题,阿⾥校招面试题
  8. linux命令(56):环境变量:/etc/profile、/etc/bashrc 、~/.profile、~/.bashrc
  9. 玩转Bootstrap(JS插件篇)-第1章 模态弹出框 :1-2 动画过渡
  10. PS替换图片图标操作