Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >『爬虫四步走』手把手教你使用Python抓取并存储网页数据!

『爬虫四步走』手把手教你使用Python抓取并存储网页数据!

作者头像
刘早起
发布于 2020-10-23 07:42:22
发布于 2020-10-23 07:42:22
5.7K12
代码可运行
举报
文章被收录于专栏:早起Python早起Python
运行总次数:2
代码可运行

爬虫是Python的一个重要的应用,使用Python爬虫我们可以轻松的从互联网中抓取我们想要的数据,本文将基于爬取B站视频热搜榜单数据并存储为例,详细介绍Python爬虫的基本流程。如果你还在入门爬虫阶段或者不清楚爬虫的具体工作流程,那么应该仔细阅读本文!

第一步:尝试请求

首先进入b站首页,点击排行榜并复制链接

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://www.bilibili.com/ranking?spm_id_from=333.851.b_7072696d61727950616765546162.3

现在启动Jupyter notebook,并运行以下代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import requests

url = 'https://www.bilibili.com/ranking?spm_id_from=333.851.b_7072696d61727950616765546162.3'
res = requests.get('url')
print(res.status_code)
#200

在上面的代码中,我们完成了下面三件事

  • 导入requests
  • 使用get方法构造请求
  • 使用status_code获取网页状态码

可以看到返回值是200,表示服务器正常响应,这意味着我们可以继续进行。

第二步:解析页面

在上一步我们通过requests向网站请求数据后,成功得到一个包含服务器资源的Response对象,现在我们可以使用.text来查看其内容

可以看到返回一个字符串,里面有我们需要的热榜视频数据,但是直接从字符串中提取内容是比较复杂且低效的,因此我们需要对其进行解析,将字符串转换为网页结构化数据,这样可以很方便地查找HTML标签以及其中的属性和内容。

在Python中解析网页的方法有很多,可以使用正则表达式,也可以使用BeautifulSouppyquerylxml,本文将基于BeautifulSoup进行讲解.

Beautiful Soup是一个可以从HTML或XML文件中提取数据的第三方库.安装也很简单,使用pip install bs4安装即可,下面让我们用一个简单的例子说明它是怎样工作的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from bs4 import BeautifulSoup

page = requests.get(url)
soup = BeautifulSoup(page.content, 'html.parser')
title = soup.title.text 
print(title)
# 热门视频排行榜 - 哔哩哔哩 (-)つロ 干杯~-bilibili

在上面的代码中,我们通过bs4中的BeautifulSoup类将上一步得到的html格式字符串转换为一个BeautifulSoup对象,注意在使用时需要制定一个解析器,这里使用的是html.parser

接着就可以获取其中的某个结构化元素及其属性,比如使用soup.title.text获取页面标题,同样可以使用soup.bodysoup.p等获取任意需要的元素。

第三步:提取内容

在上面两步中,我们分别使用requests向网页请求数据并使用bs4解析页面,现在来到最关键的步骤:如何从解析完的页面中提取需要的内容

Beautiful Soup中,我们可以使用find/find_all来定位元素,但我更习惯使用CSS选择器.select,因为可以像使用CSS选择元素一样向下访问DOM树。

现在我们用代码讲解如何从解析完的页面中提取B站热榜的数据,首先我们需要找到存储数据的标签,在榜单页面按下F12并按照下图指示找到

可以看到每一个视频信息都被包在class="rank-item"li标签下,那么代码就可以这样写?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
all_products = []

products = soup.select('li.rank-item')
for product in products:
    rank = product.select('div.num')[0].text
    name = product.select('div.info > a')[0].text.strip()
    play = product.select('span.data-box')[0].text
    comment = product.select('span.data-box')[1].text
    up = product.select('span.data-box')[2].text
    url = 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模块写入,需要注意的是设置好编码encoding='utf-8-sig',否则会出现中文乱码的问题

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import csv
keys = all_products[0].keys()

with open('B站视频热榜TOP100.csv', 'w', newline='', encoding='utf-8-sig') as output_file:
    dict_writer = csv.DictWriter(output_file, keys)
    dict_writer.writeheader()
    dict_writer.writerows(all_products)

如果你熟悉pandas的话,更是可以轻松将字典转换为DataFrame,一行代码即可完成

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import pandas as pd
keys = all_products[0].keys()

pd.DataFrame(all_products,columns=keys).to_csv('B站视频热榜TOP100.csv', encoding='utf-8-sig')

小结

至此我们就成功使用Python将b站热门视频榜单数据存储至本地,大多数基于requests的爬虫基本都按照上面四步进行。

不过虽然看上去简单,但是在真实场景中每一步都没有那么轻松,从请求数据开始目标网站就有多种形式的反爬、加密,到后面解析、提取甚至存储数据都有很多需要进一步探索、学习。

本文选择B站视频热榜也正是因为它足够简单,希望通过这个案例让大家明白爬虫的基本流程,最后附上完整代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import requests
from bs4 import BeautifulSoup
import csv
import pandas as pd

url = 'https://www.bilibili.com/ranking?spm_id_from=333.851.b_7072696d61727950616765546162.3'
page = requests.get(url)
soup = BeautifulSoup(page.content, 'html.parser')

all_products = []

products = soup.select('li.rank-item')
for product in products:
    rank = product.select('div.num')[0].text
    name = product.select('div.info > a')[0].text.strip()
    play = product.select('span.data-box')[0].text
    comment = product.select('span.data-box')[1].text
    up = product.select('span.data-box')[2].text
    url = product.select('div.info > a')[0].attrs['href']

    all_products.append({
        "视频排名":rank,
        "视频名": name,
        "播放量": play,
        "弹幕量": comment,
        "up主": up,
        "视频链接": url
    })


keys = all_products[0].keys()

with open('B站视频热榜TOP100.csv', 'w', newline='', encoding='utf-8-sig') as output_file:
    dict_writer = csv.DictWriter(output_file, keys)
    dict_writer.writeheader()
    dict_writer.writerows(all_products)

### 使用pandas写入数据
pd.DataFrame(all_products,columns=keys).to_csv('B站视频热榜TOP100.csv', encoding='utf-8-sig')

-END-

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-10-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 早起Python 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
1 条评论
热度
最新
为什么直接复制了代码,按照一步一步走,还是说 keys = all_products[0].keys() 是 list index out of range
为什么直接复制了代码,按照一步一步走,还是说 keys = all_products[0].keys() 是 list index out of range
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
【Python爬虫五十个小案例】爬取豆瓣电影Top250
文章链接:https://cloud.tencent.com/developer/article/2470420
小馒头学Python
2024/11/25
5720
【Python爬虫五十个小案例】爬取豆瓣电影Top250
不会 Python 没关系,手把手教你用 web scraper 抓取豆瓣电影 top 250 和 b 站排行榜
如果要抓取数据,一般使用Python是很方便的,不过如果你还不会推荐使用Chrome扩展 web scraper,下面就分别用Python和 web scraper 抓取豆瓣电影top 250 和b站排行榜的数据。
苏生不惑
2020/11/10
1.4K0
不会 Python 没关系,手把手教你用 web scraper 抓取豆瓣电影 top 250 和 b 站排行榜
深入剖析 Python 爬虫:淘宝商品详情数据抓取
淘宝平台的商品详情页包含了丰富的信息,如商品名称、价格、销量、评价、参数等。这些数据对于市场调研、数据分析、产品定价等商业决策具有极高的价值。然而,淘宝的反爬虫机制非常强大,直接使用简单的 HTTP 请求往往无法获取完整数据。因此,我们需要借助 Selenium 模拟浏览器行为,并通过代理服务器来隐藏爬虫的真实身份。
小白学大数据
2025/02/18
990
深入剖析 Python 爬虫:淘宝商品详情数据抓取
用Python爬取b站弹幕,看大家还会接受《爱情公寓5》吗?
尽管抄袭傍身,也没能阻挡《爱情公寓5》进击的脚步。 最近爱情公寓电视剧微博发布了长达8分钟的揭幕视频,官宣新季将在2020正式开播。 几位主演纷纷转发宣传,将#爱情公寓5揭幕#的话题送上了热搜。 观众在经历过一次《爱情公墓》的诈骗后,能否接受《爱情公寓5》(下文简称爱5)? 让我们来分析一下。 获取数据 首先,我选取了在B站上最热的视频,目前已经179万播放量,2万弹幕。
朱小五
2019/11/28
5530
【Python爬虫五十个小案例】爬取全国高校名单
文章链接:https://cloud.tencent.com/developer/article/2472469
小馒头学Python
2024/12/01
2820
【Python爬虫五十个小案例】爬取全国高校名单
Python爬虫实战:从零到一构建数据采集系统
在大数据时代,数据采集是开发者的必备技能之一,而Python凭借其简洁的语法和丰富的库(如requests、BeautifulSoup)成为爬虫开发的首选语言。本文将从零开始,带你一步步构建一个简单的网页数据采集系统,爬取目标网站的数据并保存为CSV文件。无论是新手还是有经验的开发者,都能从中收获实用技巧。欢迎在评论区分享你的爬虫经验!
DevKevin
2025/02/23
3060
爬取微博热榜并将其存储为csv文件
基于大数据技术的社交媒体文本情绪分析系统设计与实现,首先需要解决的就是数据的问题,我打算利用Python 语言的Scrapy、Beautiful Soup等工具抓取一段时间内新浪微博用户对于热点事件的博文之后,按照事件、时间等多种方式进行分类,接着利用正则表达式等工具过滤掉微博正文中的超链接、转发信息、表情符号、广告宣传和图片等无效信息之后,将处理完的文本进行手工标注,最终将标注的文本作为训练语料库。今天的主要工作量就是对数据的获取,进行简单的热榜爬虫、和热点爬虫,热榜爬虫代码进行公开,热点爬虫代码需要的欢迎私信有偿获取。
秋名山码神
2023/10/16
3970
爬取微博热榜并将其存储为csv文件
深入剖析 Python 爬虫:淘宝商品详情数据抓取
淘宝平台的商品详情页包含了丰富的信息,如商品名称、价格、销量、评价、参数等。这些数据对于市场调研、数据分析、产品定价等商业决策具有极高的价值。然而,淘宝的反爬虫机制非常强大,直接使用简单的 HTTP 请求往往无法获取完整数据。因此,我们需要借助 Selenium 模拟浏览器行为,并通过代理服务器来隐藏爬虫的真实身份。
小白学大数据
2025/02/17
1270
我用Python爬虫爬取并分析了C站前100用户最高访问的2000篇文章
最近系统地学习了正则表达式,发现正则表达式最大的应用之一——网络爬虫之前一直没有涉猎,遂借此契机顺带写一个爬虫的demo备用。选择对象是CSDN排行榜前100用户,各自按访问量从高到低排序的前20篇文章,使用一些简单的数据分析手段看看技术热点,方便今后拓宽技术栈。
润森
2022/08/18
3920
我用Python爬虫爬取并分析了C站前100用户最高访问的2000篇文章
爬虫 | 周末不知道看啥电影?不存在的
最近不知道为什么很想看电影,但又不知道什么电影好看,就想去豆瓣找找,之前学了一点简单的爬虫,刚好可以用来练练手。内容比较长,可以边听音乐边看,嘻嘻~
佛系编程人
2019/08/14
5250
爬虫 | 周末不知道看啥电影?不存在的
Python 爬取飞猪上全国景点的数据
前段时间有人找我写代码爬点东西,就是爬飞猪上全国景点的当月销量、优惠价、城市这些数据,等我写好了之后,他说不要了…
伪君子
2019/09/09
2.6K4
Python 爬取飞猪上全国景点的数据
【Python爬虫五十个小案例】微博热点爬取小案例~
文章链接:https://cloud.tencent.com/developer/article/2473806
小馒头学Python
2024/12/05
7270
【Python爬虫五十个小案例】微博热点爬取小案例~
Python爬虫-小测验
(1)读取给定的dangdang.html页面内容,注:编码为gbk(5分) (2)获取页面中所有图书的名称,价格,作者,出版社及图书图片的url地址(20分) (3)将获取的信息保存至文件(excel、csv、json、txt格式均可)(5分) 网页文件dangdang.html文件下载链接: https://pan.baidu.com/s/1awbG5zqOMdnWzXee7TZm6A 密码: 3urs
潇洒坤
2018/09/10
5950
Python爬虫-小测验
独家 | 手把手教你用Python进行Web抓取(附代码)
作为一名数据科学家,我在工作中所做的第一件事就是网络数据采集。使用代码从网站收集数据,当时对我来说是一个完全陌生的概念,但它是最合理、最容易获取的数据来源之一。经过几次尝试,网络抓取已经成为我的第二天性,也是我几乎每天使用的技能之一。
数据派THU
2018/12/18
4.9K0
独家 | 手把手教你用Python进行Web抓取(附代码)
深入探索 Python 爬虫:高级技术与实战应用
Python 爬虫是一种强大的数据采集工具,它可以帮助我们从互联网上自动获取大量有价值的信息。在这篇文章中,我们将深入探讨 Python 爬虫的高级技术,包括并发处理、反爬虫策略应对、数据存储与处理等方面。通过实际的代码示例和详细的解释,读者将能够掌握更高级的爬虫技巧,提升爬虫的效率和稳定性。
用户10354340
2024/10/04
2300
Python爬虫数据存哪里|数据存储到文件的几种方式
爬虫请求解析后的数据,需要保存下来,才能进行下一步的处理,一般保存数据的方式有如下几种:
吾非同
2021/03/12
12.1K0
使用Python和BeautifulSoup提取网页数据的实用技巧
在数据驱动的时代,获取网页数据并进行分析和处理是一项重要的任务。Python作为一门强大的编程语言,在处理网页数据的领域也表现出色。本文将分享使用Python和BeautifulSoup库提取网页数据的实用技巧,帮助你更高效地获取和处理网页数据。
华科云商小徐
2023/09/11
4300
【Python爬虫实战入门】:全球天气信息爬取
注意:如果一段文档格式不标准,那么在不同解析器生成的 Beautiful Soup 数可能不一样。 查看 解析器之间的区别 了解更多细节。
爱喝兽奶的熊孩子
2024/05/08
6970
【Python爬虫实战入门】:全球天气信息爬取
【python实操】年轻人,想会写抢购脚本和爬虫?试试多线程吧(附爬虫完整源代码)
Python 多线程(multi-threading)是一种利用多个线程同时执行任务的技术,它旨在提高程序的运行效率和性能。
20岁爱吃必胜客
2023/03/27
1.2K0
【python实操】年轻人,想会写抢购脚本和爬虫?试试多线程吧(附爬虫完整源代码)
实战|手把手教你用Python爬取存储数据,还能自动在Excel中可视化!
大家好,在之前我们讲过如何用Python构建一个带有GUI的爬虫小程序,很多本文将迎合热点,延续上次的NBA爬虫GUI,探讨如何爬取虎扑NBA官网数据。 并且将数据写入Excel中同时自动生成折线图,主要有以下几个步骤
星星在线
2020/11/19
1.7K0
实战|手把手教你用Python爬取存储数据,还能自动在Excel中可视化!
推荐阅读
相关推荐
【Python爬虫五十个小案例】爬取豆瓣电影Top250
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验