使用 Beautiful Soup 从 Airbnb 网站上抓取酒店信息
微信搜索关注《Python学研大本营》,加入读者群,分享更多精彩
当我们需要一个网站的数据,但是从网站提供商那里请求数据的过程很复杂时,最好的解决方案就是抓取。
Airbnb是为旅行者提供住宿服务的大型网站之一。由于规模庞大,住宿服务可分为别墅、酒店、树屋、沙漠之家等多种类型,在品类中可见一斑。
该网站当然提供了大量的酒店数据,但该网站的架构对于初学者来说相当复杂。另一方面,Airbnb使用各种 javascript 来访问数据,因此您的抓取过程可能并不容易。(我写这篇文章是在 2023 年 1 月)。
起初,我认为抓取Airbnb网站会像抓取其他酒店网站一样简单,但当我开始编写代码并在网站上的每个元素中搜索类时,我意识到我最初的想法被误导了。让我在下面解释我的过程。
您应该采取的第一步是安装所需的库,特别是 beautifulsoup 库,或者您可以使用以下语法:
# Instalasi beautifulsoup
pip install beautifulsoup4
重要的是要注意,您还应该安装其他库,例如 requests,它将允许您发送 HTTP 请求并检索网站的 HTML。
pip install requests
接下来,您将导入其他基础库,例如下面的代码(如果没有,请先安装)。
from bs4 import BeautifulSoup # Beautifulsoup
import requests # for access the link
其实Beautiful Soup的基础使用还是比较简单的,写几行代码就可以理解。在这种情况下,我要演示的抓取是在一个页面上(当然,这并不是说我想宣传那家特定的酒店)。
Villa Dewi Laksmi 将是我们将从中获取信息的示例之一。最重要的是要知道我们将从网站页面中提取的组件和类/id 名称。
在这种情况下,我想从页面中提取标题,标题位于类为“_fecoyn4”的 h1 中。您可以尝试的语法如下:
url = 'https://www.airbnb.co.id/rooms/2046355' #Link hotel
respons = requests.get(url) #Send request to url
soup = BeautifulSoup(respons.content, 'html5lib') #Soup the site
judul = soup.find('h1',class_='_fecoyn4').text #Take header 1 on the site
但是结果会是这样的:
这意味着我们尝试检索的对象没有成功检索任何内容,因为据说我们正在尝试访问“ NoneType ”的属性。如果您尝试打印( title ),结果也将为空。
那么,有什么办法呢?我们将检索网站的原始 html。您可以使用以下语法来执行此操作。
text = soup.get_text()
text #Take all text from html
结果你会得到这样的:
当然,如果不使用这个原始 html 将没有用。这里可以使用的技巧是使用正则表达式来提取所需的信息(在本例中我们将提取标题)。可以做的第一个技巧是找到我们要查找的关键字,在本例中为“ Villa Dewi Laksmi ”,然后在原始 html 输出上执行CTRL+F并搜索上面的句子,然后您会找到{ “__typename”:“PdpTitleSection”,“title”:“Villa Dewi Laksmi”。从这里我们可以创建一个正则表达式,如下所示:
regex = r'"__typename":"PdpTitleSection","title":"(.*?)"'
match = re.search(regex, text)
if match:
print(match.group(1))
上述方法也可用于提取价格、位置、主机名和其他信息,只要它存在于原始 html 文本中即可。上面的语法也可以用在其他产品页面上,因为标题代码在每个页面上都是相似的。
我们可以从中得出的结论是,尽管网站可能难以抓取,但总有一种方法可以提取您需要的数据。但是,如果您有时间和意图,最好联系网站所有者并以尊重的方式请求数据:)
如果您喜欢我的文章,请喜欢并关注我。
推荐书单
《图解数据智能》
《图解数据智能》是一本为数字资源的对接方、分配方以及广大的入门学习者提供相关数据智能概念的科普读物。书中各个概念之间相对独立,读者可以将其作为一本检索用的工具书籍,也可以根据自己的兴趣灵活查阅相关篇章。
无论你是数智化领域的专业从业人员,还是刚刚毕业想要进入该领域的技术小白,抑或是正面临着数字化转型的政府或企业人员,或者是千千万万个生活在这个数智化社会中的普通人,都可以阅读此书,你将从酣畅淋漓的技术释疑和轻松有趣的漫画解读中,找到自己的答案。
精彩回顾
微信搜索关注《Python学研大本营》
访问【IT今日热榜】,发现每日技术热点