Din*_*nah 4 language-agnostic screen-scraping
当屏幕刮擦时,需要注意哪些"问题"?
这样做的灵感是:我的配偶的同事让我从Blogger托管的博客中抓取所有页面,她的癌症朋友在最后几个月保留了这个页面,这位女士希望保留所有帖子以防万一博客删除.我最终找到了一个几乎不够好的免费工具.
抓取许多Blogger页面的一个问题是,通常会有一个导航菜单,您可以在其中单击三角形以按年或月扩展帖子列表.这些小错误创建了大量的重复内容,因为您在扩展/折叠的菜单的不同组合中反复使用相同的页面.在Blogger的情况下,我不确定这是可以避免的,因为链接都被格式化为真正的http链接而不是明显的JavaScript调用.它仍然让我思考:
如果你要抓一个网站,你可以补偿什么样的潜在非显而易见的事情?
虽然正则表达式可以适用于各种各样的任务,但我发现在解析HTML DOM时通常会出现问题.HTML的问题在于,文档的结构变化很大,难以准确(并且准确地说,我的意思是100%的成功率,没有误报)提取标签.
我建议你做的是使用DOM解析器,如BeautifulSoup或等效的(PHP中的SimpleHTMLDom).
有些人可能认为这样做太过分了,但最终,维护起来会更容易,并且可以提供更多的可扩展性.
可以设计正则表达式以实现相同的目标,但是会受到限制.例如,开发一个正则表达式以获取src
和alt
标签会强制该alt
属性src
在相反或相反之后,并且克服此限制会增加正则表达式的复杂性.
另外,请考虑以下内容.要<img>
使用正则表达式正确匹配标记并仅获取src
属性(在组2中捕获),您需要以下正则表达式:
<\s*?img\s+?[^>]*?\s*?src\s*?=\s*?(["'])((\\?+.)*?)\1[^>]*?>
Run Code Online (Sandbox Code Playgroud)
如果出现以下情况,上述情况可能会失败:
src
属性周围不使用引号.src
在其值的某处使用>字符.因此,再次,不要使用正则表达式来解析dom文档.
我屏幕刮了很多.一些忠告: