爬虫-爬取豆瓣短评

啥是爬虫?

​按照一定的规则,自动地抓取互联网信息的程序。

为啥要用爬虫?

​可以利用爬虫自动地采集互联网中的信息,采集回来后进行相应的存储或处理,在需要检索某些信息的时候,只需在采集回来的信息中进行检索

怎么用爬虫?

爬虫分为三个部分

1、解析网页

2、提取信息

3、保存信息

接下来将会用requests库来实现一个简单地爬虫

爬取豆瓣短评

首先我们需要安装requests库

我们可以cmd指令进入python解释器,然后输入pip install requests然后等待安装。

同样我们也可以打开pycharm在Terminal中输入相同的指令

安装比较慢的同学可以修改下载源也可以下载

链接:解决pip下载慢

提取码:9b7d

来解决

安装好了我们就可以来使用requests库的功能了

首先我们访问豆瓣250选择自己感兴趣的电影这里我们选择了《肖申克的救赎》

打开全部短评

这样我们就得到了短评的链接我们先看第二页

https://movie.douban.com/subject/1292052/commentsstart=20&limit=20&sort=new_score&status=P

一、请求网页

拿到网址后我们就可以利用requests库的get方法来请求网页

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

response = requests.get(url)

print(response)

但是这样我们是访问不到的,因为站点知道了我们不是“正常人”。我们的应对方案就是尽可能的模拟浏览器的功能或行为。既然浏览器有请求头的发送,那么我们的程序自然也应该加上。这时候我们就要用到get中的请求头功能了。

headers = {'User-Agent':

'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36 Edg/84.0.522.40'}

# user-Agent 可以自己设置也可以自己去网页network中查找

我们尝试再次访问

response = requests.get(url, headers=headers)

print(response, type(response))

----------------------

请求发出后,Requests 会基于 HTTP 头部对响应的编码作出有根据的推测。当你访问 response.text 之时,Requests 会使用其推测的文本编码。你可以找出 Requests 使用了什么编码,并且能够使用 r.encoding 属性来改变它:如果你改变了编码,每当你访问 response.text,Request 都将会使用 response.encoding 的新值。HTML 页面是可以设置编码信息的,可以查看该编码信息,然后设置 response.encoding 为相应的编码。这样就能使用正确的编码解析 response.text 了。而网页的编码可以在浏览器中去查看。

print(response.text) # 网页源码

print(response.encoding) # utf-8

我们得到了网页源码response.text那么我们就可以进行下一步我们先将第一步包装成函数

def getHtml(url):

response = requests.get(url, headers=headers)

htmldata = response.text

return htmldata

二、解析网页

我们得到了文本(text)模式的网页源码,那么我们就可以用正则表达式来解析它来提取我们要的数据

import re模块在这里我们主要用四个内容

.

匹配除换行符 \n 之外的任何单字符。要匹配 . ,请使用 . 。

*

匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 *。

?

匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 ?。

( )

标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 ( 和 )。

简单来说.*?就是匹配任意数量任意类型的字符()就是问匹配到了吗?匹配到了就取出来…

在这里我们要选取的是短评在网页中他的一个代码格式是这样子的

关于希望最强有力的注释。这是其中一条评论,他在span标签下两个> <之间,注意我们要匹配的一定是唯一的,不然会匹配到别的内容

comment = re.findall('(.*?)', htmldata) # findall查找全文

# 看网页源码我们看到评论都在这个格式里 所以findall能够全部匹配

同样我们也可以用正则得到名字

肖申克的救赎 短评

#

(.*?)

我们再用函数将第二步封装起来

# 提取信息 名字评论

def getComment(htmldata):

movies_name = re.findall('

(.*?)

', htmldata)

comment = re.findall('(.*?)', htmldata)

return movies_name,comment

三、保存数据

这个比较简单了

def save():

with open(f"{str(movies_name)}.txt", "a", encoding="utf-8")as f:

f.write("%s\n" % str(comment))

当然你也可以保存成别的格式

总结:

简单地一个爬虫程序就编好了

再来回答一下为什么取第二页,我们来对比下其他页

https://movie.douban.com/subject/1292052/comments?start=0&limit=20&sort=new_score&status=P # 第一页

https://movie.douban.com/subject/1292052/comments?start=20&limit=20&sort=new_score&status=P # 第二页

https://movie.douban.com/subject/1292052/comments?start=40&limit=20&sort=new_score&status=P # 第三页

我们发现他只是 start 那里数据不一样 那我们可以通过修改 数值来爬取多页吗?

完整代码奉上

import requests

import re

# 获取网页源码

def getHtml(url):

response = requests.get(url, headers=headers)

htmldata = response.text

return htmldata

# 提取信息 名字评论

def getComment(htmldata):

movies_name = re.findall('

(.*?)

', htmldata)

comment = re.findall('(.*?)', htmldata)

return movies_name, comment

# 保存文件

def save():

with open(f"{str(movies_name)}.txt", "a", encoding="utf-8")as f:

f.write("%s\n" % str(comment))

headers = {

'User-Agent1':

'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36 Edg/84.0.522.40'

}

for i in range(0, 10):

movie_url = f"https://movie.douban.com/subject/1292052/comments?start={i * 20}&limit=20&sort=new_score&status=P"

htmldata = getHtml(movie_url)

movies_name, comment = getComment(htmldata)

save()

这样我们就得到了前十页的数据了

本文地址:https://blog.csdn.net/A1L__/article/details/107572276

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

python爬取豆瓣短评_爬虫-爬取豆瓣短评相关推荐

  1. python爬取分页数据_爬虫抓取分页数据的简单实现

    昨天,我们已经利用Jsoup技术实现了一个简单的爬虫,原理很简单,主要是要先分析页面,拿到条件,然后就去匹配url,采用dome解析的方式循环抓取我们需要的数据,从而即可轻松实现一个简单的爬虫.那么, ...

  2. python爬取二级页面_爬虫代码改进(二)|多页抓取与二级页面

    本文是下面两篇文章的续篇 本系列包括如下内容抓取豆瓣top250一页多个字段 整合成列表 存储为json文件 定义成函数形式 多页抓取之构造url 多页抓取之翻页 抓取二级页面数据 通过生成器优化代码 ...

  3. python批量下载静态页面_爬虫实战之,爬取壁纸,批量下载

    一.前言 在开始写爬虫之前,我们先了解一下爬虫 首先,我们需要知道爬虫是什么,这里直接引用百度百科的定义 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按 ...

  4. python爬去百度图片_爬虫篇| 爬取百度图片(一)

    什么是爬虫 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁.自动索引.模 ...

  5. java爬取网易云歌单_爬虫爬取网易云歌单

    一.主题式网络爬虫设计方案 1.主题式网络爬虫名称:爬取网易云音乐歌单 2.主题式网络爬虫爬取的内容与数据特征分析 爬取网易云音乐歌单前十页歌单,轻音乐类型的歌单名称.歌单播放量.歌单链接.用户名称. ...

  6. python爬取学校新闻_python爬虫爬取新闻的简单实现

    我们通常是使用爬虫爬取网站信息,其实网络爬虫是一种应用于搜索引擎的程序.使用python爬虫可以将一个网站的所有内容与链接进行阅读.例如我们每日都要获取新闻信息,利用python爬虫就可以帮助我们爬取 ...

  7. python爬取bilibili弹幕_Python爬虫爬取Bilibili弹幕过程解析

    先来思考一个问题,B站一个视频的弹幕最多会有多少? 比较多的会有2000条吧,这么多数据,B站肯定是不会直接把弹幕和这个视频绑在一起的. 也就是说,有一个视频地址为https://www.bilibi ...

  8. python爬图代码实例_Python爬虫爬取煎蛋网图片代码实例

    这篇文章主要介绍了Python爬虫爬取煎蛋网图片代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 今天,试着爬取了煎蛋网的图片. 用到的包: ...

  9. python爬取微博文本_Python爬虫爬取新浪微博内容示例【基于代理IP】

    本文实例讲述了Python爬虫爬取新浪微博内容.分享给大家供大家参考,具体如下: 用Python编写爬虫,爬取微博大V的微博内容,本文以女神的微博为例(爬新浪m站:https://m.weibo.cn ...

最新文章

  1. ML之catboost:基于自定义数据集利用catboost 算法实现回归预测(训练采用CPU和GPU两种方式)
  2. python建立列表_python创建列表和向列表添加元素的实现方法
  3. 蓄水池采样(Reservoir Sampling)
  4. node js 技术架构_[视频] Node JS中的干净架构
  5. InfluxDB、grafana、collect部署监控(centos6.8)
  6. c语言实验集成环境软件,TurboC for Windows集成实验与学习环境
  7. Android四大组件(activity task stack)
  8. 融云首席科学家任杰:写在融云 8 周年
  9. matlab三踪示波器,3.2 示波器CSV数据导入MATLAB
  10. autojs之语音识别
  11. hosts文件为空,仍然显示ERR_CONNECTION_RESET的解决方法(hosts.ics)
  12. 真假屏幕测试软件,如何检测4K电视屏幕的真伪,漏出死像素?一键识别两种工具!...
  13. 跨站脚本攻击漏洞(XSS):基础知识和防御策略
  14. PS|002自制夸张表情包
  15. 从零开始的博客建站之旅——搭建
  16. .NET Core部署到linux(CentOS)最全解决方案,高阶篇(Docker+Nginx 或 Jexus)
  17. 苹果发布代表全球各地的 22 个国家的Apple Watch表带和表盘
  18. jenkins构建触发器设置(定时任务)
  19. BUUCTF 梅花香自苦寒来
  20. LayUI表格在线编辑动态修改列数据

热门文章

  1. 公众号jdk 获取手机号_公众号免费留言/评论功能获取步骤
  2. 嘿,兄弟!移动端调试工具Flipper了解一下(下)
  3. Docker的安装及使用
  4. Android学习笔记 二三 多页显示 Flipper的使用
  5. 百度云BCC服务器CentOS7.5 Nginx配置https
  6. 7天物联网智能家居实战-DAY1
  7. EOS Platform 7.6.6部署在PAS6.5,governor里部署ecd和epd,失败:com.primeton.system.impl.exception.ContributionDep
  8. 强烈推荐一波高质量的公众号,全是圈内大佬!
  9. 视频+白皮书 | Kyligence 与 Kylin 功能差异详解
  10. 与element ui结合省市区三级联动