在我的过去,我已经实施了一些网页刮取项目--从小型到中型(大约100.000个刮取页面)不等。通常我的起点是一个索引页,它链接到几个页面,上面有我想刮的细节。最后大部分时间我的项目都起作用了。但是我总是觉得我可以改进工作流程(特别是关于减少我给被清除的网站造成的流量的挑战[和连接到那个主题:被禁止的风险:D])。
这就是为什么我想知道你的(最佳实践)web刮板设计方法(针对小型和中型项目)。
通常我会这样构建我的网页抓取项目:
>
我标识一个起始点,其中包含我想要从中刮取数据的URL。起点有一个相当可预测的结构,这使得它很容易被刮去
我在想要刮取的endpoint上看了一眼,并找出一些用来刮取和处理数据的函数
我收集我想从我的起点刮起的所有URL(endpoint),并将它们存储在一个列表中(有时起点是几个页面...例如如果显示搜索结果,一个页面只显示20个结果...但这些页面的结构几乎完全相同)
我开始抓取url_list并刮取我感兴趣的数据。
为了刮取数据,我运行一些函数以我需要的格式构造和存储数据
一旦我成功地抓取了数据,我将url标记为“已抓取”(如果遇到错误、超时或类似情况,我不必从头开始,而是可以从进程停止的地方继续)
我把我需要的所有数据结合起来,完成了这个项目
现在我想知道修改这个工作流并停止在抓取时提取/处理数据是否是一个好主意。相反,我会收集原始数据/网站,将url标记为已抓取并继续抓取。当所有网站都下载完毕(或者--如果是一个更大的项目--在更大的任务之间),我会运行函数来处理和存储原始数据。
这种做法的好处是:
缺点是:
不知道您的目标,这很难说,但我认为这是一个好主意,就调试进行。
例如,如果您的刮刀的唯一目的是记录某个产品的价格,但您的刮刀突然无法获得该数据,那么是的--干掉刮刀是有意义的。
但是让我们说,目标不仅仅是价格,而是页面上的各种属性,而刮刀只是由于网站的变化而未能拾取一个属性。如果是这种情况,并且刮取其他数据属性仍然有价值,那么我将继续刮取,但记录错误。另一个考虑因素是失败率。网页抓取是非常挑剔的--有时网页加载不同或不完全,有时网站改变。刮刀100%失效了吗?或者,它仅仅是失败的5%的时间?
在出错时保存html转储当然有助于调试xpath失败等问题。您可以将更仔细的错误处理所消耗的空间最小化。例如,保存一个包含html转储的文件,如果这个特定错误还不存在,例如xpath无法返回值或类型不匹配等。
关于:被禁赛。我建议使用刮取框架。例如,在python中有一个Scrapy处理请求流。此外,代理服务的存在是为了避免被禁止。至少在美国,网络抓取已被明确视为合法。所有的公司都占到了网页刮取流量。你不能用100k刮破一个服务。想想沃尔玛每天在亚马逊上的几百万次刮刮乐,反之亦然。
问题内容: 我有一个使用 像素 渲染页面的网站。但是,当我在具有不同屏幕分辨率的不同设备中查看网站时, 整个页面将无法容纳在屏幕中 ,如果我使用 百分比 ,页面内容将会 受到挤压 。 是响应式网页设计是设计网页的正确选择。如果是这样,我几乎不用担心。 将现有网站转换为包含响应式设计所涉及的风险是什么? 有没有可用的框架来做到这一点,哪个是最好的框架 设备和浏览器如何支持它 问题答案: 使用媒体查询
我希望一些帮助处理一个奇怪的边缘案例与我正在构建的一个分页API。 与许多API一样,这个API分页了大量的结果。如果查询/foos,将得到100个结果(即foo#1-100),以及一个指向/foos?page=2的链接,该链接将返回foo#101-200。 不幸的是,如果在API使用者进行下一个查询之前从数据集中删除了foo#10,/foos?page=2将抵消100并返回foos#102-20
作者:陈希章 发表于 2017年8月6日 引子 离上一篇Office Add-in的文章已经过去了一段时间,期间有去年Office 365 Asia Devday & Hackathon的二等奖获得者闫晓迪写了Office365开发系列——开发一个全功能的Word Add-In ,另外我也写了两篇有关人工智能方面的文章 人工智能背景下的Office 365现状和发展趋势 Office 365 机器
本文向大家介绍20行JS代码实现网页刮刮乐效果,包括了20行JS代码实现网页刮刮乐效果的使用技巧和注意事项,需要的朋友参考一下 分享一段用canvas和JS制作刮刮乐的代码,JS部分去掉注释不到20行代码 效果如下 盖伦.jpg 刮刮乐.gif HTML部分 没什么要特别注意的 为了效果加了些CSS样式 CSS部分 注意 1.为了清除浏览器自带效果加了 2.img需要在灰布下面,加了z-index
本文向大家介绍设计微服务的最佳实践是什么?相关面试题,主要包含被问及设计微服务的最佳实践是什么?时的应答技巧和注意事项,需要的朋友参考一下 以下是设计微服务的最佳实践: 为每个微服务分开数据存储 将代码保持在类似的成熟度等级上 为每个微服务进行单独的构建 部署到容器中 将服务器视为无状态的
布局方式 静态布局 自适应布局 流式布局 响应式布局 弹性布局 兼容策略 渐进坚强 优雅降级 移动优先