网页数据抓取软件(Python中解析网页的基本流程(一)-早起Python)
优采云 发布时间: 2022-01-21 01:09网页数据抓取软件(Python中解析网页的基本流程(一)-早起Python)
早起 Python
专注Python爬虫/数据分析/办公自动化
爬虫是 Python 的一个重要应用。使用Python爬虫,我们可以很方便的从网上抓取我们想要的数据。本文将以爬取B站视频热搜榜数据为例进行存储。详细介绍了这四个步骤。Python爬虫的基本流程。Step 1 请求先尝试进入b站首页,点击排行榜,复制链接。启动 Jupyter notebook 并运行以下代码:importrequests
网址=''
res=requests.get('url')
打印(res.status_code)
#200 在上面的代码中,做以下三件事:导入请求
使用get方法构造请求
使用status_code获取网页的状态码,可以看到返回值为200,表示服务器正常响应,表示我们可以继续。第二步解析页面在上一步中,我们通过requests向网站请求数据后,成功获得了一个收录服务器资源的Response对象。现在我们可以使用 .text 查看其内容。
可以看到返回的是一个字符串,里面收录了我们需要的热榜视频数据,但是直接从字符串中提取内容复杂且效率低,所以我们需要对其进行解析,将字符串转换成网页结构数据,即使查找 HTML 标记及其属性和内容变得容易。Python中解析网页的方式有很多种,可以使用正则表达式,也可以使用BeautifulSoup、pyquery或lxml,本文将基于BeautifulSoup进行讲解。Beautiful Soup 是一个第三方库,可以从 HTML 或 XML 文件中提取数据。安装也很简单,使用 pip install bs4 安装即可,我们用一个简单的例子来说明它是如何工作的。frombs4import 美汤
page=requests.get(url)
汤=BeautifulSoup(page.content,'html.parser')
标题=汤.标题.文本
打印(标题)
#Hot Video Rankings-bilibili(゜-゜)つロCheers~-bilibili 在上面的代码中,我们通过bs4中的BeautifulSoup类将上一步得到的html格式字符串转换成BeautifulSoup对象,注意使用时,你需要制定一个解析器,这里是 html.parser。然后您可以获得结构元素之一及其属性。比如使用soup.title.text获取页面标题,也可以使用soup.body、soup.p等获取任何需要的元素。Step 3 提取内容 在上述两步中,我们使用requests向网页请求数据,使用bs4解析页面。现在我们来到最关键的一步:如何从解析后的页面中提取出需要的内容。在 Beautiful Soup 中,我们可以使用 find/find_all 来定位元素,但我更习惯使用 CSS 选择器。select 因为可以像使用 CSS 选择元素一样沿着 DOM 树向下移动。现在我们用代码来说明如何从解析后的页面中提取B站热榜的数据。首先,我们需要找到存储数据的标签,在列表页面按 F12 并按照下面的说明找到它。
可以看到每个视频信息都包裹在class="rank-item"的li标签下,那么代码可以写成all_products=[]
products=soup.select('li.rank-item')
对于productinproducts:
rank=product.select('div.num')[0].text
name=product.select('>a')[0].text.strip()
play=product.select('span.data-box')[0].text
评论=product.select('span.data-box')[1].text
up=product.select('span.data-box')[2].text
url=product.select('>a')[0].attrs['href']
all_products.append({
“视频排名”:排名,
“视频名称”:名称,
“播放音量”:播放,
“弹幕”:评论,
“上主要”:上,
“视频链接”:网址
}) 在上面的代码中,我们首先使用了soup.select('li.rank-item'),然后返回一个收录每个视频信息的列表,然后遍历每个视频信息,仍然使用CSS选择器来提取我们需要的字段信息是以字典的形式存储在开头定义的空列表中。可以注意到我使用了多种选择方法来提取元素,这也是选择方法的灵活性。有兴趣的读者可以自行进一步研究。Step 4 存储数据通过前三步,我们成功使用requests+bs4从网站中提取出需要的数据,最后只需将数据写入Excel并保存即可。如果对 pandas 不熟悉,可以使用 csv 模块来写。需要注意的是设置了encoding='utf-8-sig',否则会出现中文乱码的问题。导入csv
键=所有产品[0].keys()
withopen('B站视频热榜TOP100.csv','w',newline='',encoding='utf-8-sig')asoutput_file:
dict_writer=csv.DictWriter(output_file,keys)
dict_writer.writeheader()
dict_writer.writerows(all_products) 如果你熟悉pandas,你可以通过一行代码轻松地将字典转换为DataFrame。导入pandasaspd
键=所有产品[0].keys()
pd.DataFrame(all_products,columns=keys).to_csv('B站视频热榜TOP100.csv',encoding='utf-8-sig')
结论至此,我们已经成功使用Python将b站热门视频列表的数据存储在本地。大多数基于请求的爬虫基本上都遵循以上四个步骤。不过,虽然看起来很简单,但在实景中的每一步都不是那么容易的。从请求数据来看,目标网站有各种形式的反爬取、加密,以及后期分析、提取甚至存储数据。需要进一步探索和学习。本文之所以选择B站视频热榜,是因为够简单。希望通过这个案例大家可以了解Python爬虫工作的基本流程,最后附上完整代码importrequests
frombs4import 美汤
导入csv
导入pandasaspd
网址=''
page=requests.get(url)
汤=BeautifulSoup(page.content,'html.parser')
all_products=[]
products=soup.select('li.rank-item')
对于productinproducts:
rank=product.select('div.num')[0].text
name=product.select('>a')[0].text.strip()
play=product.select('span.data-box')[0].text
评论=product.select('span.data-box')[1].text
up=product.select('span.data-box')[2].text
url=product.select('>a')[0].attrs['href']
all_products.append({
“视频排名”:排名,
“视频名称”:名称,
“播放音量”:播放,
“弹幕”:评论,
“上主要”:上,
“视频链接”:网址
})
键=所有产品[0].keys()
withopen('B站视频热榜TOP100.csv','w',newline='',encoding='utf-8-sig')asoutput_file:
dict_writer=csv.DictWriter(output_file,keys)
dict_writer.writeheader()
dict_writer.writerows(all_products)
###使用熊猫写入数据
pd.DataFrame(all_products,columns=keys).to_csv('B站视频热榜TOP100.csv',encoding='utf-8-sig')来源:早起Python