使用Python的Yelp网络抓取介绍
本文旨在帮助新手了解网络搜刮器,介绍其基本逻辑和一个实际案例,用Python和Octoparse创建一个Yelp爬虫。
-
Apr. 07, 22 - 大数据区 -观点
喜欢 (4)
评论
保存
鸣谢
9.60K浏览次数
加入DZone社区,获得完整的会员体验。
原文发表于2020年6月17日
和很多持有与计算机编程根本不相关的学位的程序员一样,我从2019年开始就在努力自学编码,希望能在工作中取得成功。作为一个自学成才的开发者,我对所学到的东西更实际,更有目标性。这也是我为什么特别喜欢网络刮削的原因,它不仅有产品监测、社交媒体监测、内容聚合等多种用例,而且很容易上手。
网络刮削的基本理念是从网站中提取信息片段,并将其导出为易于阅读的格式。如果你是一个以数据为导向的人,你会发现网络搜刮的巨大价值。幸运的是,有免费的网络刮削工具可以在不编码的情况下自动捕捉网络数据。
网络环境的复杂程度超出我们的想象。说到这里,我们需要投入时间和精力来维护搜刮工作,更不用说从多个网站大规模搜刮了。从另一个角度看,搜刮工具使我们免于编写代码和无休止的维护工作。
为了让你了解python搜刮和网站搜刮工具的利弊,我将带领你了解python的整个工作。然后,我将把这个过程与网站搜刮工具进行比较。
让我们开始吧!
用Python进行网络刮削
项目。
-
网站。Yelp.com
-
搜集内容:企业名称、评级、评论数、电话号码、价格范围、地址、邻居
你可以在这里找到完整的编码:https://github.com/whateversky/yelp
前提条件
-
Pycharm- 用于快速检查和修复编码错误
一般的搜刮过程是这样的。
-
首先,我们创建一个spider来定义我们将如何执行并从Yelp提取数据。换句话说,我们发送GET请求,然后为搜刮者设置规则来抓取网站。
-
然后,我们解析网页内容,并返回带有提取数据的字典。说到这里,我们告诉蜘蛛,它必须返回一个Item对象或Requested对象。
-
最后,导出从spider返回的提取数据。
我只专注于蜘蛛和解析器。然而,在数据提取之前,我们当然需要了解网络结构。在编码时,你也会发现自己一直在不断地检查网页,以访问divs和class。要检查网站,请到你喜欢的浏览器中,右键点击。选择 "检查",在网络下找到 "XHR "标签。
你会发现相应的列表信息,包括商店名称、电话号码、位置和评级。当我们展开 "PaginationInfo "时,它显示每页有30个列表,并有6932个列表的总数量。因此,在本视频结束时,我们应该能够得到这么多的结果。现在让我们进入有趣的部分。
蜘蛛
首先,打开Pycharm,建立一个新项目。然后建立一个Python文件,并将其命名为 "Yelp_spider"
获取页面。
我们创建一个get_page方法。这将传递一个查询参数,该参数包含所有列表的网络URL,然后返回页面的JSON。注意,我还添加了一个user-agent字符串来欺骗webserver,以绕过任何scraper检测。我们可以直接复制和粘贴请求头信息。这不是必须的,但如果你倾向于重复搜刮一个网站,你会发现它在大多数情况下很有用。
我添加了.format参数来格式化URL,所以它返回的端点遵循一个模式,在本例中,是 "纽约市的酒吧 "的搜索结果中的所有列表页
def get_page(self, start_number):
爪哇
x
1
url = “https://www.yelp.com/search/snippet?find_desc=bars&find_loc=New%20York%2C%20NY%2C%20United%20States&start={}&parent_request_id=dfcaae5fb7b44685&request_origin=user” \ .format(start_number)
.format(start_number)
获取详细信息。
我们刚刚成功地获取了列表页的URL,现在我们可以告诉搜刮器使用get_detail方法访问每个详情页。
详细页面的URL由一个域名和一个表示业务的路径组成。
由于我们已经收集了列表的URL,我们可以简单地定义URL模式,其中包括一个附加在www.yelp.com 的路径。这样,它将返回一个详细页面URL的列表
爪哇
xxxxxxxxxx
1
1
def get_detail(self, url_suffix): url = “https://www.yelp.com/” + path
接下来,我们仍然需要添加一个头,使搜刮器看起来更人性化。这类似于我们进门前要先敲门的一种常见的礼节。
然后,我创建了一个FOR循环,结合IF语句来定位我们要得到的标签。在这种情况下,包含企业名称、评级、评论、电话等的标签。
与将返回JSON格式的列表页不同,详情页通常以HTML格式回应我们。因此,我把标点符号和多余的空格去掉,使它们在解析时看起来干净整齐。
解析
当我们一个接一个地访问这些页面时,我们可以指示我们的蜘蛛通过解析页面获得详细信息。
首先,在同一文件夹下创建第二个文件,名为 "yelp_parse.py"。并开始导入和执行YelpSpider。
在这里,我添加了一个分页循环,因为有30个房源分在多个页面。start_number "是一个偏移值,在本例中是 "0"。当我们完成对当前页面的抓取时,它的数字会增加30。以这种方式,逻辑将像这样。
-
获取前30个列表
-
分页
-
获取31-60条信息
-
分页
-
获取61-90条信息....
最后但并非最不重要的是,我创建了一个字典,将键和值与各自的数据属性配对,包括企业名称、评级、电话、价格范围、地址、社区等等。
用网络搜刮工具进行搜刮。
通过python,我们直接与网络服务器、门户网站和源代码进行交互。理想情况下,这种方法会更有效,但涉及到编程。由于网站的变化多端,我们需要不断地编辑搜刮器并适应变化。Selenium和Puppeteer也是如此,它们是近亲,但与Python相比,在大规模提取方面有局限性。
另一方面,网络搜刮工具则更加友好。让我们以Octoparse为例。
Octoparse的最新版本OP8.1应用了Train算法,在网页被加载时检测数据属性。如果你曾经体验过iPhone的人脸解锁,它应用了人工智能,"检测 "对你来说不是一个陌生的术语。
同样,Octoparse会自动分解网页并识别各种数据属性,例如,企业名称、联系人信息、评论、位置、评级等等。
以yelp为例。一旦网页被加载,它就会自动解析网页元素并自动读取数据属性。一旦检测过程完成,我们可以从预览部分看到Octoparse为我们捕获的所有数据,漂亮而整洁然后你会注意到工作流程已经自动创建。这个工作流程就像一个搜刮路线图,搜刮器会按照这个方向来捕捉数据。
我们在Python部分也创建了同样的东西,但它们没有像Octoparse那样用清晰的语句和图形进行可视化。编程更具有逻辑性和抽象性,如果没有这个领域的坚实基础,是不容易概念化的。
但这还不是全部,我们想从详细的页面中获得信息。这很容易。只要按照提示面板上的指南,找到 "在后面的页面上收集网页数据"。
然后选择title_url,可以把我们带到详细页面。
一旦我们确认了这个步骤,一个新的步骤将自动添加到工作流程中。然后浏览器会显示一个详细页面,我们可以点击页面内的任何数据属性。例如,当我们点击企业名称 "ARDYN "时,提示指南将回应一组行动供我们选择。只需点击 "提取所选元素的文本 "命令,它就会处理剩下的事情,并将该动作添加到工作流中。同样,重复上述步骤,以获得 "评级"、"评论数"、"电话号码"、"价格范围"、"地址"。
一旦我们设置好所有的东西,我们就可以在确认后执行搜刮器。
最后的想法。使用Python进行搜刮与网络搜刮工具的比较
它们都可以得到类似的结果,但在性能上有所不同。使用Python,在执行之前肯定有很多基础工作需要做。而搜刮工具在很多方面都更友好。
如果你是编程世界的新手,想探索网络刮削的力量,尽管如此,网络刮削工具是一个很好的起点。当你踏入编码的大门时,有更多的选择和组合,我相信会激发新的想法,让事情变得更轻松,更容易。
经Liz Zhang许可发表在DZone。点击这里查看原文。
DZone贡献者所表达的观点属于他们自己。
DZone上的热门文章
评论