当屏幕抓取时,需要注意哪些“问题”?
这个的灵感来自:我的配偶的同事让我从Blogger托管的博客中抓取所有页面,她的癌症朋友在最后几个月保留了这个页面,这位女士希望保留所有帖子以防万一博客被删除了。我最终找到了一个几乎不够好的免费工具。
抓取许多Blogger页面的一个问题是,通常会有一个导航菜单,您可以在其中单击三角形以按年或月扩展帖子列表。这些小错误创建了大量的重复内容,因为您在扩展/折叠的菜单的不同组合中反复使用相同的页面。在Blogger的情况下,我不确定这是可以避免的,因为链接都被格式化为真正的http链接而不是明显的JavaScript调用。不过,它让我想到了:
如果你要抓一个网站,你可以补偿什么样的潜在非显而易见的事情?
答案 0 :(得分:8)
虽然正则表达式可以适用于各种各样的任务,但我发现解析HTML DOM时通常会遇到这种情况。 HTML的问题在于,文档的结构变化很大,难以准确(并且准确地说,我的意思是100%的成功率,没有误报)提取标签。
我建议您使用DOM解析器,例如BeautifulSoup或等效的(PHP中的SimpleHTMLDom)。
有些人可能认为这样做有点过分,但最终会更容易维护,并且还可以提供更多的可扩展性。
可以设计正则表达式来实现相同的目标,但是会受到限制。例如,开发正则表达式以获取src
和alt
标记会强制alt
属性位于src
之后或相反,并且要克服此限制会添加正则表达式更复杂。
另外,请考虑以下内容。要使用正则表达式正确匹配<img>
标记并仅获取src
属性(在第2组中捕获),您需要以下正则表达式:
<\s*?img\s+?[^>]*?\s*?src\s*?=\s*?(["'])((\\?+.)*?)\1[^>]*?>
然后,如果出现以上情况,则上述情况可能会失败:
src
属性周围没有使用引号。src
的另一个属性使用&gt;在他们的价值的某个地方。所以再一次,不要使用正则表达式来解析dom文档。
答案 1 :(得分:7)
我屏幕刮了很多。一些建议:
答案 2 :(得分:3)
首先,我要检查RSS提要。在博客上,如果我没记错的话,你只需要将/rss
添加到根网址即可。
然后我会检查是否还有一些工具可以抓取博主。
然后,如果没有RSS提要,也没有现有的工具,我会放弃并手工复制/粘贴。除非我们说5000页,否则它会更快更轻松。从尝试过的人那里拿走它。
如果您可以访问实际帐户,则博客具有导出功能。
编辑:当然,你可以尝试机械土耳其人。
答案 3 :(得分:2)
就陷阱而言。限制在一段时间内提出的请求数量通常是个好主意。在很短的时间内粉碎一个有很多请求的网站是拒绝您的请求的好方法。
答案 4 :(得分:1)
除技术考虑外,请确保您不要将自己置于法律风险之中。大多数大型网站在其使用条款中都有特定的法律语言,不允许通过自动计算机程序以编程方式访问其服务,以及明显的版权问题。
从技术角度来看,绝对使用DOM解析器库,您将节省大量时间。许多提供了将HTML读入XML结构的能力,可以使用XPath查询,以便准确找到所需内容。
答案 5 :(得分:0)
如果您认识有权访问该帐户的人,则可以使用Blogger's export "Export blog" feature。