返回介绍

8.4 使用 Scrapely 实现自动化抓取

发布于 2024-02-05 23:37:18 字数 1085 浏览 0 评论 0 收藏 0

为了抓取标注域,Portia使用了Scrapely 库,这是一款独立于Portia之外的非常有用的开源工具,该工具可以从https://github.com/scrapy/ scrapely 获取。Scrapely使用训练数据建立从网页中抓取哪些内容的模型,并在以后抓取相同结构的其他网页时应用该模型。下面是该工具的运行示例。

(portia_example)$ python
 >>> from scrapely import Scraper
 >>> s = Scraper()
 >>> train_url = 'http://example.webscraping.com/view/Afghanistan-1'
 >>> s.train(train_url, { 'name': 'Afghanistan', 'population': '29,121,286' } )
 >>> test_url = 'http://example.webscraping.com/view/United-Kingdom-239'
 >>> s.scrape(test_url)
[ { u'name': [u'United Kingdom'], u'population': [u'62,348,447' ] } ]

首先,将我们想要从Afghanistan 网页中抓取的数据传给Scrapely,本例中是国家名称和人口数量。然后,在另一个国家页上应用该模型,可以看出Scrapely使用该模型返回了正确的国家名称和人口数量。

这一工作流允许我们无须知晓网页结构,只把所需内容抽取出来作为训练案例,就可以抓取网页。如果网页内容是静态的,在布局发生改变时,这种方法就会非常有用。例如一个新闻网站,已发表文章的文本一般不会发生变化,但是其布局可能会更新。这种情况下,Scrapely可以使用相同的数据重新训练,针对新的网站结构生成模型。

在测试Scrapely时,此处使用的示例网页具有良好的结构,每个数据类型的标签和属性都是独立的,因此Scrapely可以正确地训练模型。但是,对于更加复杂的网页,Scrapely可能在定位内容时失败,因此在其文档中会警告你应当“谨慎训练”。也许今后会有更加健壮的自动化爬虫库发布,不过现在仍需了解使用第2章中介绍的技术直接抓取网站的方法。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文