数据分析之小白的爬虫入门教学

2023-11-16

数据是数据分析的基础,俗话说巧妇难为无米之炊,想要做好数据分析,必须先获得数据。

在去年的这个时候,我一直想自己尝试写个爬虫,我买了一本python的书籍,但是因为种种原因,当时自己学习的速度很慢,一直到最近才慢慢的会写一些简单的爬虫,那这篇文章的标题就定为,小白的爬虫入门教学,作为分享一下我的python爬虫的入门过程,如果你是一个大佬,还请多多指教呀,如果你是一个没什么了解过爬虫,但是又想学习的人,或许你可以看完这篇文章。

我一开始,也是只知道很多人用python写爬虫作为数据分析的工具,不知道爬虫的原理是什么,他们为什么又要用python来写。后来看来一些有关于爬虫的一些论文,对爬虫的原理和过程才有了一定的了解,其实爬虫运作的过程和我们平时用浏览器看网页是没什么差别的,只不过爬虫在访问了这些网站之后,会按照一定规则来将我们需要的信息获取下来,最后通过获取的信息就行数据分析。爬虫的过程大概可以描述为:向网站发起请求、获取网站响应内容、解析成python能读取的内容、最后将数据保存在本地或者数据库之类的地方。至于爬虫为什么选用python来写,是因为python提供了诸多方便使用的库,你只需要调用这些库,而不用自己去编写这些功能,方便而简单。下面我通过写一个简单的爬虫来帮助理解。

很多网上的大佬的教学都是写爬豆瓣相关的,我了解了一番之后,是因为豆瓣的反爬虫没有那么严格,只需要你的request带有header就行,而且豆瓣的数据都是比较好的json数据,算是挺方便的。所以这次的例子选择的是豆瓣的高分电影榜。

首先,我们要分析一下目标页面,看看他的运作规律什么的,首先打开豆瓣电影,选择更多,选择豆瓣高分,按评价排序,大概是下面的样子
在这里插入图片描述
下拉发现,这个页面大概显示了20部电影,想要显示更多就要点最下面的加载更多,不着急,通常点击加载更多的时候,如果不是跳到别的页面,那么他就是这个页面和站点有数据交换过,F12进入浏览器开发者模式,选择network标签,再选择xhr标签,你每点一次加载更多,站点就向你发送了一次数据,右键在浏览器中直接打开这个链接,你就可以查看他发的是什么,他的地址栏是
在这里插入图片描述
这个链接的大概意思就是,这是豆瓣高分电影里面,按照评分排序,并且这页只显示20部电影,并且这页是从第20的电影之后的20个电影,就是评分排21-40的20部电影,页面显示如下

可以看出站点向我们传输的数据就是这种格式的,包含了不少信息。知道了这种规律之后,我们是不是可以通过改变地址栏的数字来获取不同排行的内容呢,答案是肯定的,知道了运作的规律之后,我们就可以开始编写爬虫啦,下面直接贴出代码吧

-- coding: utf-8 --

import requests #这里导入到几个需要用到的库,想了解的直接百度库名,就不再赘述了

from fake_useragent import UserAgent

import json

import pandas as pd

import os

def doubanmovie():

limit=100

url=‘https://movie.douban.com/j/search_subjects?type=movie&tag=%E8%B1%86%E7%93%A3%E9%AB%98%E5%88%86&sort=rank&page_limit={}&page_start=0’

#这个url就是刚刚贴出的地址栏复制下来的,大括号等下用来format个数字进去

headers={“User-Agent”:UserAgent(verify_ssl=False).random} #伪装成浏览器

response=requests.get(url.format(limit),headers=headers) #发送请求

json_response=response.text

json_response=json.loads(json_response) #将获取到的文本转化成json数据

col=[‘title’,‘rate’,‘url’] #定义表格需要哪些表头

num=len(json_response[‘subjects’])

data=pd.DataFrame(index=range(num),columns=col) #使用用pandas库的对象

for i in range(num):

data.loc[i,‘title’]=json_response[‘subjects’][i][‘title’] #一条一条写进去

data.loc[i,‘rate’]=json_response[‘subjects’][i][‘rate’]

data.loc[i,‘url’]=json_response[‘subjects’][i][‘url’]

print(‘爬虫结束’)

return data

filename=‘豆瓣高分电影前100.xlsx’

data=doubanmovie()

data.to_excel(filename) #最后输出到本地

由于数据只选择爬了100条,所以很快就完成了,大概过程就是先分析了这个页面的数据传输方式,然后写的时候就先获取到这个数据,然后再转换成python对象,最后导出到本地。下面看一下爬到的数据的格式,
在这里插入图片描述
大概就是这些电影啦,数据大概是6月份爬好的。如果你想爬取更多的数据,或者说豆瓣限制了每次传输的数据只有有限的几条,只需要多一个循环连接的操作就可以啦。

这篇文章我在早前一个多月的时候就想写了,中间因为毕业的事,就业搬出学校,还有自己的懒惰…等等原因拖了好久,这篇文章浅浅的讲述了爬虫的原理,但这些数据并不够进行一些数据分析,我暂时有个更深入一点点想法,就是通过这个url继续获取这部电影的更多信息,打开链接是这样的
在这里插入图片描述
这上面的信息就多了,比如….好多,甚至下面还有一些评论,都是可以作为数据分析的来源,如果哪天实现了这个想法,就会有后续的。

好了,我是爱学习的惊尘(假装激励自己的flag),这篇文章能帮到你最好啦,也请路过的大佬多多指教。

关于Python技术储备

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

二、Python必备开发工具

在这里插入图片描述

四、Python视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
在这里插入图片描述

五、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。在这里插入图片描述

六、Python练习题

检查学习结果。
在这里插入图片描述

七、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
在这里插入图片描述
在这里插入图片描述
这份完整版的Python全套学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据分析之小白的爬虫入门教学 的相关文章

  • Python:使用 string.format() 将单词大写

    是否可以使用字符串格式将单词大写 例如 user did such and such format user foobar 应该返回 Foobar 做了这样那样的事情 请注意 我很清楚 capitalize 但是 这是我正在使用的代码 非常
  • MANIFEST.in、package_data 和 data_files 澄清吗?

    我正在尝试创建一个 Python 包 并且目录结构如下 mypkg init py module1 x py y py z txt module2 a py b py 然后我将所有文件添加到MANIFEST in当我检查创建的存档时 它包含
  • 如何使用 conda 在一行中安装多个包?

    我需要使用 conda 安装以下多个软件包 我不确定 conda forge 是什么 有些使用 conda forge 有些不使用它 是否可以将它们安装成一行而不需要一一安装 谢谢 conda install c conda forge d
  • pandas Wide_to_long 后缀参数

    我对在 pandas 中使用 Wide to long 时的参数有疑问 有一个参数叫suffix我不明白 在文档中它说 后缀 str 默认 d 捕获所需后缀的正则表达式 d 捕获数字后缀 没有数字的后缀可以用否定字符类 D 指定 您还可以进
  • 使用应用程序脚本将 MS Word 文件(保存在云端硬盘中)转换为 Google 文档

    我被某些事情困住了 找不到解决办法 有没有办法使用文件 url 或 id 将存储在 Google Drive 中的 MS Word 文件转换为 Google 文档 我目前有一个电子表格 其中包含文件的网址 或者 也可以使用 python 脚
  • ca 证书 Mac OS X

    我需要在emacs 上安装offlineimap 和mu4e 问题是配置 当我运行 Offlineimap 时 我得到 OfflineIMAP 6 5 5 Licensed under the GNU GPL v2 v2 or any la
  • Python GTK + webkit - 在 gtk.main() 之后插入 JavaScript

    我在终端中尝试了这个 一切正常 但是如果我在脚本内运行这个 我无法在 gtk main 之后插入 JavaScript import gtk import webkit w gtk Window b webkit WebView w add
  • 最小二乘法拟合直线 python 代码

    我有一个由 X 和 Y 坐标组成的散点图 我想使用直线的最小二乘拟合来获得最佳拟合线 直线最小二乘拟合是指 如果 x 1 y 1 x n y n 是测量数据对 则最佳直线是y A Bx 这是我的Python代码 number of poin
  • Django 模型字段默认基于另一个模型字段

    我使用 Django Admin 构建一个管理站点 有两张表 一张是ModelA其中有数据 另一个是ModelB里面什么也没有 如果一个模型字段b b in ModelB为None 可以显示在网页上 值为ModelA的场a b 我不知道该怎
  • 在 Linux 上的 Python 中使用受密码保护的 Excel 工作表

    问题很简单 我每周都会收到一堆受密码保护的 Excel 文件 我必须解析它们并使用 Python 将某些部分写入新文件 我得到了文件的密码 当在 Windows 上完成此操作时 处理起来很简单 我只需导入 win32com 并使用 clie
  • 如何将类添加到 LinkML 中的 SchemaDefinition?

    中的图表https linkml io linkml model docs SchemaDefinition https linkml io linkml model docs SchemaDefinition and https link
  • 在 iPython/pandas 中绘制多条线会生成多个图

    我试图了解 matplotlib 的状态机模型 但在尝试在单个图上绘制多条线时遇到错误 据我了解 以下代码应该生成包含两行的单个图 import pandas as pd import pandas io data as web aapl
  • Python 3在for循环中更改字典键的值不起作用

    我的 python 3 代码没有按预期工作 def addFunc x y print x y def subABC x y z print x y z def doublePower base exp print 2 base exp d
  • 使用 WSGI 在 Windows XAMPP 中设置 Python 路径

    我正在 Webfaction 上设置实时服务器的开发版本 在本地计算机上的虚拟 Apache 服务器环境 运行没有任何错误 中运行 Django 应用程序 XP 使用 Python 2 6 运行 XAMPP Lite 我可以提交更改通过 G
  • 根据列索引重命名 Dataframe 列

    是否有内置函数可以按索引重命名 pandas 数据框 我以为我知道列标题的名称 但事实证明第二列中有一些十六进制字符 根据我接收数据的方式 我将来可能会在第 2 列中遇到这个问题 因此我无法将这些特定的十六进制字符硬编码到 datafram
  • 在python中读取PASCAL VOC注释

    我在 xml 文件中有注释 例如这个 它遵循 PASCAL VOC 约定
  • Python 导入非常慢 - Anaconda python 2.7

    我的 python import 语句变得非常慢 我使用 Anaconda 包在本地运行 python 2 7 导入模块后 我编写的代码运行得非常快 似乎只是导入需要很长时间 例如 我使用以下代码运行了一个 tester py 文件 imp
  • Streamlabs API 405 响应代码

    我正在尝试使用Streamlabs API https dev streamlabs com Streamlabs API 使用 Oauth2 来创建应用程序 因此 首先我将使用我的应用程序的用户发送到一个授权链接 其中包含我的应用程序的客
  • 在python中对列表列表执行行总和和列总和

    我想用python计算矩阵的行和和列和 但是 由于信息安全要求 我无法使用任何外部库 因此 为了创建矩阵 我使用了列表列表 如下所示 matrix 0 for x in range 5 for y in range 5 for pos in
  • Python 中的字符串slugification

    我正在寻找 slugify 字符串的最佳方法 蛞蝓 是什么 https stackoverflow com questions 427102 in django what is a slug 我当前的解决方案基于这个食谱 http code

随机推荐

  • HTML5(十一)——WebSocket 基础教程

    一 为什么要学 WebSocket websocket 是 HTML5 提供的一种长链接双向通讯协议 使得客户端和服务器之间的数据交换更简单 允许服务端主动向客户端推送数据 并且客户端与服务端只需连接一次 就可以保持长久连接 并进行数据通信
  • Unity 委托 (Delegate) 的简单理解以及实现

    委托相当于把某一个方法当成参数 当执行委托的时候就相当于执行了方法 所以这个方法必须和委托具有相同的参数类型 委托的简单实现 using UnityEngine 委托 代理 是存有对某个方法的引用的一种引用类型变量 委托语法 delegat
  • 蓝桥杯冲击01 - 质数篇

    目录 前言 一 质数是什么 二 易错点 三 试除法判断是否为质数 四 质数常考三大模型 五 真题练手 前言 距离蓝桥杯还有一个月 高效复习蓝桥杯知识 质数相关的题目在蓝桥杯中经常出现 例如 2016年蓝桥杯省赛初赛第四题就是要求判断一个数是
  • 基于宽表的数据建模

    一 业务背景 1 1 数据建模现状 互联网企业往往存在多个产品线 每天源源不断产出大量数据 这些数据服务于数据分析师 业务上的产品经理 运营 数据开发人员等各角色 为了满足这些角色的各种需求 业界传统数仓常采用的是经典分层模型的数仓架构 从
  • 部分安卓端ncnn模型推理输出数据存在大量-nan和nan的问题

    原文issue链接 部分安卓端ncnn模型推理输出数据存在大量 nan的问题 Issue 3607 Tencent ncnn github com 问题描述 onnx ncnn模型在pc端推理输出结果正确且基本一致 在部分安卓设备上使用同一
  • 剑指 Offer 41. 数据流中的中位数(java+python)

    如何得到一个数据流中的中位数 如果从数据流中读出奇数个数值 那么中位数就是所有数值排序之后位于中间的数值 如果从数据流中读出偶数个数值 那么中位数就是所有数值排序之后中间两个数的平均值 例如 2 3 4 的中位数是 3 2 3 的中位数是
  • 微信小程序内添加腾讯地图 导航

    1 微信小程序 设置 第三方设置 插件管理 添加插件 如果搜索不到腾讯位置服务路线规划插件 可搜索如下地址直接添加腾讯位置服务路线规划 小程序插件 微信公众平台 问题 提示添加失败 项目主体不符的 可以通过 服务 微信服务市场 搜索 腾讯位
  • Python3 sorted自定义排序

    Python3的sorted函数具有key参数 可以进行自定义的排序 但并不是直接将自定义比较函数赋给key 这一点和C 是不一样的 在python3中 需要import functools来传递比较函数 注意 在Python3中 自定义比
  • hibernate之关于1+N的问题

    Hibernate 之关于1 N的问题 1 N问题 也有人叫做N 1问题 至今未统一 在这里我会告诉大家我为什么称之为1 N问题 什么情况下会产生1 N问题 在实际的项目开发中 我们配置的一对多 或者是多对一 在查询的时候会产生一种现象 例
  • Qt Http请求,post和get的两种方式

    今天我们介绍一下QT的http请求 这里有post和get两种方式 一 post请求方式 参数分为网址和具体请求值两个部分 有时候还需要设置头信息 看具体情况定 1 void MainWindow sendPostRequest 2 3 Q
  • 防止SQL注入

    SQL注入是指攻击者通过在输入的数据中注入恶意的SQL代码 以获取非法访问 窃取敏感信息等操作 以下是一些防止SQL注入的方法 使用参数化查询 使用参数化查询可以防止SQL注入攻击 参数化查询是指在执行查询时 将参数与查询语句分离 使得输入
  • java程序员微信群,欢迎准java行业人员加入,会一直更新

    微信群 请扫描二维码加入 本人在北京 主场北京 位置不限 仅限java行业交流 C C 以及python请另外加群 谢谢 欢迎准 java行业的进入 杜绝假冒程序员加入 精兵简政 群内与java无关私事请私聊 任何java的问题 欢迎讨论
  • NodeJS实现视频转码

    视频转码就是一个先解码 再编码的过程 从而将原来的视频转换成我们需要的视频 这种转换可能包括各式 mp4 avi flv等 分辨率 码率 帧率等 传统的视频转码中 很常用的工具是FFmpeg FFmpeg是一套可以用来记录 转换数字音频 视
  • UNIX环境高级编程 学习笔记 第十四章 高级I/O

    低速系统调用为可能使进程永远阻塞的一类系统调用 1 如果某些文件类型 管道 终端设备 网络设备 的数据不存在 读操作可能会使调用者永远阻塞 2 如果数据不能被某文件类型立即接受 管道中无空间 网络流控制 写操作可能会使调用者永远阻塞 3 在
  • 25行代码爬取英雄联盟手游英雄皮肤图片

    下面附源码 手游网址 英雄联盟手游官网 腾讯游戏 1 点击英雄 2 随机点一个英雄进去 3 按F12进入开发者模式 然后刷新 4 在搜索框里输入 js 找到skins js点击 我们可以发现所有现有的英雄皮肤信息都在里面 皮肤的图片链接以及
  • (Java基础知识) 几种Java任务调度比较

    前言 任务调度是指基于给定时间点 给定时间间隔或者给定执行次数自动执行任务 本文由浅入深介绍四种任务调度的 Java 实现 Timer ScheduledExecutor 开源工具包 Quartz 开源工具包 JCronTab 此外 为结合
  • pycharm配置镜像源

    一 背景 由于python再下载包时 下载时容易出现超时 等各种问题 原因 由于Python库的服务器都在国外 国内下载是速度普遍会很慢 所以需要配置一个镜像源来加快下载速度 二 解决方案 方案一 配置国内镜像源 清华 https pypi
  • 数据链路层的有那三个基本问题?为什么都必须加以解决?

    数据链路层的有那三个基本问题 为什么都必须加以解决 数据链路层的三个基本问题 封装成帧 透明传输 差错检测 封装成帧就是在一段数据前后分别添加首部和尾部 接收端以便从收到的比特流中识别帧的开始与结束 帧定界是分组交换的必然要求 透明传输避免
  • DCM与CCM

    1 什么是DCM断续工作模式 CCM连续工作模式 首先 反激开关电源的工作模式有三种 连续模式 临界模式 断续模式 如图为输出电流的波形图 由U L di dt 得到di U L dt 输入电压U和电感都是定值 所以电流的三角形式 在某一固
  • 数据分析之小白的爬虫入门教学

    数据是数据分析的基础 俗话说巧妇难为无米之炊 想要做好数据分析 必须先获得数据 在去年的这个时候 我一直想自己尝试写个爬虫 我买了一本python的书籍 但是因为种种原因 当时自己学习的速度很慢 一直到最近才慢慢的会写一些简单的爬虫 那这篇