当前位置: 首页 > 科技观察

PythonBeautifulSoup抓取简单指南

时间:2023-03-12 02:56:06 科技观察

Python中的BeautifulSoup库可以轻松地从网页中提取HTML内容。今天我们将讨论如何使用BeautifulSoup库从HTML页面中提取内容,之后我们将使用它将它转换为Python列表或字典。什么是网页抓取,我为什么需要它?答案很简单:并非每个网站都有用于获取内容的API。您可能想从您最喜欢的烹饪网站获取食谱,或从旅游博客获取照片。如果没有API,提取HTML(或者抓取scraping可能是获取内容的唯一途径。我会告诉你如何使用Python来做。并不是所有的网站都喜欢被抓取,有些网站可能会明确禁止。请参考到网站所有者确认是否同意抓取。Python如何抓取网站?使用Python抓取,我们将执行三个基本步骤:使用请求库获取HTML内容分析HTML结构并识别包含我们内容的标签需要使用BeautifulSoup提取标签并将数据放入Python列表InstallLibraries首先安装我们需要的库,requests库从网站中获取HTML内容,BeautifulSoup解析HTML并将其转换为Python对象。在Python3中安装它们,运行:pip3installrequestsbeautifulsoup4extractHTML在这个例子中,我会选择抓取网站的技术部分。如果你跳转到这个页面,你会看到一个标题为excerp的文章列表t,和出版日期。我们的目标是创建一个文章列表。网站页面的完整URL为:https://notes.ayushsharma.in/technology我们可以使用请求从此页面获取HTML内容:#!/usr/bin/python3importrequestsurl='https://notes.ayushsharma.in/technology'data=requests.get(url)print(data.text)变量数据将包含页面的HTML源代码。从HTML中提取内容为了从数据中提取数据,我们需要确定哪些标签具有我们需要的内容。如果你浏览HTML,你会在顶部附近找到这段:在Jekyll中使用变量定义自定义内容我最近发现Jekyll的config.yml可以用来定义自定义变量以重用内容。我觉得我一直生活在岩石下。但一次又一次地犯错是人之常情。

2021年8月
这是每篇文章在整个页面中重复出现的部分。我们可以看到.card-title包含文章标题,.card-text包含摘录,而.card-footer>small包含发布日期。让我们使用BeautifulSoup提取这些。#!/usr/bin/python3importrequestsfrombs4importBeautifulSoupfrompprintimportpprinturl='https://notes.ayushsharma.in/technology'data=requests.get(url)my_data=[]html=BeautifulSoup(data.text,'html.parser')articles=html.select('a.post-card')forarticlesinarticles:title=article.select('.card-title')[0].get_text()excerpt=article.select('.card-text')[0].get_text()pub_date=article.select('.card-footersmall')[0].get_text()my_data.append({"title":title,"excerpt":excerpt,"pub_date":pub_date})pprint(my_data)上面的代码提取文章信息并将它们放入my_data变量中。我使用pprint来美化输出,但您可以在代码中省略它。将上面的代码保存在一个名为fetch.py??的文件中并运行:python3fetch.py??如果一切顺利,你应该会看到:[{'摘录':"我最近发现可以使用Jekyll的config.yml为重用内容定义自定义变量。我觉得我一直都生活在岩石下。但是一遍又一遍地犯错''又是人之常情。','pub_date':'Aug2021','title':'在Jekyll中使用变量来定义自定义内容'},{'excerpt':"在这篇文章中,我'将重点介绍Jekyll的一些想法"'集合、博客类别页面、响应式网页设计和''netlify.toml使静态网站维护变得轻而易举。','pub_date':'2021年7月','title':'ayushsharma.in的演变:Jekyll、Bootstrap、Netlify、“静态网站和响应式设计”。.','pub_date':'2021年7月','title':'5个合理且可用的Terraform设置的关键最佳实践'},...(截断)就是这样!在这22行代码中,我们使用了Python在构建网络抓取工具时,您可以在我的示例回购摘要中找到源代码我们现在可以用它为Python列表中的网站内容做一些很酷的事情。我们可以将其作为JSON返回给另一个应用程序,或者将其转换为具有自定义样式的HTML。随意复制粘贴上面的代码并在您喜欢的网站上进行试验。玩得开心,继续编码。