「爬虫四步走」手把手教你使用Python抓取并存储网页数据
文章插图
爬虫是Python的一个重要的应用 , 使用Python爬虫我们可以轻松的从互联网中抓取我们想要的数据 , 本文将基于爬取B站视频热搜榜单数据并存储为例 , 详细介绍Python爬虫的基本流程 。 如果你还在入门爬虫阶段或者不清楚爬虫的具体工作流程 , 那么应该仔细阅读本文!
第一步:尝试请求
首先进入b站首页 , 点击排行榜并复制链接
现在启动
Jupyter notebook
, 并运行以下代码
import requestsurl = ''res = requests.get('url')print(res.status_code)#200
在上面的代码中 , 我们完成了下面三件事
- 导入
requests
- 使用
get
方法构造请求
- 使用
status_code
获取网页状态码
200
, 表示服务器正常响应 , 这意味着我们可以继续进行 。第二步:解析页面
在上一步我们通过requests向网站请求数据后 , 成功得到一个包含服务器资源的Response对象 , 现在我们可以使用
.text
来查看其内容文章插图
可以看到返回一个字符串 , 里面有我们需要的热榜视频数据 , 但是直接从字符串中提取内容是比较复杂且低效的 , 因此我们需要对其进行解析 , 将字符串转换为网页结构化数据 , 这样可以很方便地查找HTML标签以及其中的属性和内容 。
在Python中解析网页的方法有很多 , 可以使用
正则表达式
, 也可以使用BeautifulSoup
、pyquery
或lxml
, 本文将基于BeautifulSoup进行讲解.Beautiful Soup是一个可以从HTML或XML文件中提取数据的第三方库.安装也很简单 , 使用
pip install bs4
安装即可 , 下面让我们用一个简单的例子说明它是怎样工作的from bs4 import BeautifulSouppage = requests.get(url)soup = BeautifulSoup(page.content, 'html.parser')title = soup.title.textprint(title)# 热门视频排行榜 - 哔哩哔哩 (゜-゜)つロ 干杯~-bilibili
在上面的代码中 , 我们通过bs4中的BeautifulSoup类将上一步得到的html格式字符串转换为一个BeautifulSoup对象 , 注意在使用时需要制定一个解析器 , 这里使用的是html.parser
。接着就可以获取其中的某个结构化元素及其属性 , 比如使用
soup.title.text
获取页面标题 , 同样可以使用soup.body
、soup.p
等获取任意需要的元素 。第三步:提取内容
在上面两步中 , 我们分别使用requests向网页请求数据并使用bs4解析页面 , 现在来到最关键的步骤:如何从解析完的页面中提取需要的内容 。
在Beautiful Soup中 , 我们可以使用
find/find_all
来定位元素 , 但我更习惯使用CSS选择器.select
, 因为可以像使用CSS选择元素一样向下访问DOM树 。【「爬虫四步走」手把手教你使用Python抓取并存储网页数据】现在我们用代码讲解如何从解析完的页面中提取B站热榜的数据 , 首先我们需要找到存储数据的标签 , 在榜单页面按下F12并按照下图指示找到
文章插图
可以看到每一个视频信息都被包在
class="rank-item"
的li标签下 , 那么代码就可以这样写all_products = products = soup.select('li.rank-item')for product in products:rank = product.select('div.num')[0].textname = product.select('div.info > a')[0].text.stripplay = product.select('span.data-box')[0].textcomment = product.select('span.data-box')[1].textup = product.select('span.data-box')[2].texturl = product.select('div.info > a')[0].attrs['href']all_products.append({"视频排名":rank,"视频名": name,"播放量": play,"弹幕量": comment,"up主": up,"视频链接": url})
在上面的代码中 , 我们先使用soup.select('li.rank-item')
, 此时返回一个list包含每一个视频信息 , 接着遍历每一个视频信息 , 依旧使用CSS选择器来提取我们要的字段信息 , 并以字典的形式存储在开头定义好的空列表中 。可以注意到我用了多种选择方法提取去元素 , 这也是select方法的灵活之处 , 感兴趣的读者可以进一步自行研究 。
第四步:存储数据
通过前面三步 , 我们成功的使用requests+bs4从网站中提取出需要的数据 , 最后只需要将数据写入Excel中保存即可 。
如果你对pandas不熟悉的话 , 可以使用
csv
模块写入 , 需要注意的是设置好编码
- 彼尔姆|机器人公司想用 20 万美元「买断」你的脸,如果它足够友好
- 融资丨端到端通用AI智能制造平台提供商「依瞳科技」完成新一轮融资,卓源资本领投
- 新浪科技|蜂花、拉夏贝尔学会了「鸿星尔克式营销」,但结局却完全不同
- 原叶茶|联合利华「贱卖」立顿,袋泡茶的国产替代来了?丨氪金Lite
- 计费规则|关于「高德打车」用户体验的若干思考
- CPU|「小狮子诊所」内存时序到底有什么作用?
- 柳叶刀|融资丨「柳叶刀机器人」完成Pre-A+轮融资,聚焦骨科及口腔手术智能化
- 深至科技|融资丨「深至科技」完成近亿元C1轮融资,助AI医学影像真正走入基层医疗
- 退市|「PW热点」滴滴出行:即日起启动在纽交所退市的工作
- 西贝|蜂花、拉夏贝尔学会了「鸿星尔克式营销」,但结局却完全不同