文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
8.4 使用 Scrapely 实现自动化抓取
为了抓取标注域,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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论