【发布时间】:2017-11-15 13:51:33
【问题描述】:
- Web 抓取在 Windows 或 Ubuntu 上有效吗?
- 要从网络上抓取报价,哪个更好用 scrapy 或 beautiful soap?
【问题讨论】:
标签: web-scraping
【问题讨论】:
标签: web-scraping
这是一个非常笼统的覆盖面问题。基本上效率取决于以下标准:
以下是它们影响您效率的方式:
电脑性能
如果您的目标是大型电子商务网站,或者该网站使用大量 javascript(如 LinkedIn),那么您应该考虑使用性能适中的实例(计算机)来完成您的工作。请注意,如果您的计算机内存太小,
scrapy-splash的 docker 容器将自动停止并导致您的蜘蛛立即失败。相比Windows Home Edition,你最好选择Ubuntu,因为ubuntu占用内存少等等。无论你选择哪个操作系统,Server-Edition总是比Home-Edition好。
情况 1:(将 Scrapy® 与 Selenium Web 驱动程序一起使用)
情况2:(使用Scrapy配合Scrapy-spalsh javascript渲染服务)
网络稳定性
当您的实例(计算机)离您的目标站点太远时,网络稳定性很重要。您的网络速度和延迟将直接影响您的蜘蛛,有时会导致灾难。低网络速度会减慢您的请求速度,而延迟有时会导致您的蜘蛛无法加载您的目标网页。这将导致将来的内容提取错误。您的程序可能会捕获异常并立即退出,如果您不使用现代蜘蛛框架,则将来不会重新获取错误页面,因此您将丢失一些数据。与家庭网络蜘蛛相比,在公共云上部署蜘蛛是更好的解决方案。
防蜘蛛技术
提取方法
这真是一个无聊的话题,您可以使用快速性能技术来定位 xpaths、bs4、css 等元素......同时您也可以使用深度学习或搜索甚至正则表达式等低性能技术
美汤(又名 bs4):
如果你想解析复杂的网站 HTML,BeutifulSoup 不是一个好的解决方案。它不支持 xpath 或 css 选择器,因此您必须手动找出网站的元素层次结构并导致一些类似这样的代码。
for level1 in bs_obj.find_all("div", {"id", "classname"})
for level 2 in bs_obj.find_all("div", {"class", "classname"})
for level3 in bs_obj.find_all("a", {"class", "classname"})
for level4 ........
....
....
Xpath 和 CSS 选择器:
正则表达式(又名 re):
scrapy集成了xpath、css、re通过parsel,可以check this tutorial to lean how to use them within scrapy
Scrapy 是一个抓取框架,而bs4 是一个内容提取框架,所以答案是你可以use BeautifulSoup in Scrapy。【讨论】: