网页数据抓取怎么写( 爬虫是Python的一个重要的应用,使用Python爬虫我们可以轻松的从互联网中抓取 )

优采云 发布时间: 2021-09-18 08:30

  网页数据抓取怎么写(

爬虫是Python的一个重要的应用,使用Python爬虫我们可以轻松的从互联网中抓取

)

  

  爬虫是Python的一个重要应用。使用PythonCrawler,我们可以轻松地从互联网上获取我们想要的数据。本文将在抓取和存储B站视频热点搜索列表数据的基础上,详细介绍Python爬虫的基本过程。如果您还处于介绍阶段或不知道爬虫的具体工作流程,请仔细阅读本文

  步骤1:尝试请求

  首先,进入B站主页,点击排名列表,复制链接

  https://www.bilibili.com/ranking?spm_id_from=333.851.b_7072696d61727950616765546162.3

  现在启动Jupiter笔记本并运行以下代码

  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

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

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

  步骤2:解析页面

  在上一步中,通过请求从网站请求数据后,我们成功获得了一个收录服务器资源的响应对象。现在我们可以使用。文本以查看其内容

  

  您可以看到返回了一个字符串,其中收录我们需要的热列表视频数据,但是直接从字符串中提取内容既复杂又低效。因此,我们需要对其进行解析,并将字符串转换为网页结构化数据,这样我们就可以轻松地找到HTML标记及其属性和内容

  在Python中有许多解析网页的方法。您可以使用正则表达式、beautulsoup、pyquery或lxml。本文将基于beautulsoup进行解释

  Beauty soup是一个第三方库,可以从HTML或XML文件中提取数据。安装也很简单。您可以使用PIP安装BS4来安装它。让我们用一个简单的例子来说明它是如何工作的

  from bs4 import BeautifulSoup

page = requests.get(url)soup = BeautifulSoup(page.content, 'html.parser')

title = soup.title.textprint(title)# 热门视频排行榜 - 哔哩哔哩 (゜-゜)つロ 干杯~-bilibili

  在上面的代码中,我们通过BS4中的Beauty soup类将上一步获得的HTML格式字符串转换为Beauty soup对象。请注意,使用解析器时需要开发解析器,这里使用的是html.parser

  然后您可以得到一个结构化元素及其属性。例如,可以使用soup.title.text获取页面标题。你也可以用汤。身体,汤。P、 等,以获得任何所需的元素

  步骤3:提取内容

  在以上两个步骤中,我们使用请求从web页面请求数据,并使用BS4解析页面。现在我们进入最关键的一步:如何从解析的页面中提取所需的内容

  在BeautifulSoup中,我们可以使用find/find_uuuAll来定位元素,但我更习惯于使用CSS选择器。选择是因为我可以访问DOM树,方法与使用CSS选择元素相同

  现在,让我们使用代码解释如何从解析的页面中提取站点B的热列表数据。首先,我们需要找到存储数据的标签,按列表页面上的F12键,然后根据下图中的说明找到它

  

  您可以看到,每个视频消息都包装在class=“rank item”的Li标记下,因此代码可以这样编写

  在上面的代码中,我们首先使用soup。选择('li.Rank项')。此时,我们返回一个收录每个视频信息的列表,然后遍历每个视频信息,仍然使用CSS选择器提取所需的字段信息,并将其以字典的形式存储在开头定义的空列表中

  您可以注意到,我使用了多种选择方法来提取元素,这也是选择方法的灵活性。有兴趣的读者可以自己进一步研究

  步骤4:存储数据

  通过前三个步骤,我们使用requests+BS4成功地从网站提取了所需的数据。最后,我们只需将数据写入excel并保存即可

  如果您不熟悉熊猫,可以使用CSV模块编写。请注意,您应该设置encoding='utf-8-sig',否则中文代码将被乱码

  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.writeheaderdict_writer.writerows(all_products)

  如果您熟悉pandas,可以轻松地将字典转换为dataframe,只需一行代码即可完成

  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的流行视频列表数据。大多数基于请求的爬虫程序基本上遵循上述四个步骤

  然而,尽管看起来很简单,但在真实场景中的每一步都不是那么容易。从数据请求来看,目标网站具有各种形式的反爬行和加密,在以后的数据解析、提取甚至存储过程中还有很多需要进一步探索和学习的地方

  本文选择B站的视频热点列表正是因为它足够简单。我希望通过这个案例让您了解crawler的基本流程,最后附上完整的代码

  import requests

from bs4 import BeautifulSoupimport csvimport 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.writeheaderdict_writer.writerows(all_products)### 使用pandas写入数据

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

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线