解析网页到底用不用正则解析?

2014-07-23 17:57:47 +08:00
 pc10201
观点1.
不用
来源
http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454

链接内容简言之:
1) HTML 不是正则语言,无法用正则表达式解析;
2) 如果 HTML 是已知的,问题还可以掌控;
3) 类似爬虫这种,你永远不会知道你会遇到怎样复杂的 HTML;
4) 合法的 HTML 都无法用正则解析,更不用说你还会碰到不合法但是浏览器可以支持的 HTML 了。

观点2
推荐使用
来源
http://www.cnblogs.com/-ajian/p/3606306.html

获取链接建议用正则表达式,解析整个HTML非常耗时,哪怕使用最快的lxml,依然会比Python里的正则表达式慢四倍以上。而且还有大量的不规范HTML,处理起来很麻烦。正则的问题是会匹配到script里的网址,可以简单总结一下遇到的不正常URL,过滤一下即可。

我个人是简单网页用正则,复杂网页正则搞不定的用xpath
不知道大家如何处理的?
4474 次点击
所在节点    Python
15 条回复
est
2014-07-23 18:05:23 +08:00
看需求。糙快猛不怕死啥都敢用
lei286394973
2014-07-23 18:06:49 +08:00
如果是python解析的话 推荐使用 pyquery! 可以使用jquery的语法获取界面元素的。。简直神器!
imn1
2014-07-23 18:09:25 +08:00
我看数量,量多一定不用DOM,只用正则,DOM消耗内存和时间都多
量少哪个方便用哪个
其实正则基本能搞定的,只是有时候没有id很难定位,要写得很复杂,还要测试,不如xpath写得简单,所以就用xpath
akfish
2014-07-23 18:13:53 +08:00
lz标题有误导,原题目根本就没提“解析(parse)”二字。
所以被接受答案其实也是审题不明确,nb哄哄的说了一大堆正确的废话。
题主又不是要写一个通用的HTML parser,不过是要完成一项特定任务而已。
qq529633582
2014-07-23 18:16:19 +08:00
同上,用正则不是要解析HTML,只是在知道HTML大致结构的时候从网页中提取指定内容
akfish
2014-07-23 18:22:13 +08:00
如果真的说解析(parse),懂编译原理,写过编译器的人都知道是怎么回事的。
正则式只会出现在tokenize一步,并且由lexer generator生成FSM,并不会调用通用的正则式解析库。
iyaozhen
2014-07-23 18:55:57 +08:00
不知道需求是什么,抓取网页分析出可用数据的话我一般用正则+dom解析器。
先用正则匹配出目标信息所在的DIV或Table,然后在用dom解析器。这样dom解析器也不用消耗很多的内存和时间。
当然,直接用正则更快,但更麻烦,容易出错。特别是匹配表格信息,用dom解析器即快速又准确。
dorentus
2014-07-23 18:59:55 +08:00
@akfish 我倒是觉得答案没啥问题。
题主问的是怎么用 regex 匹配一些 HTML,但是由于 HTML 不是正则语言,所以*单用*正则表达式是无法匹配的。Tokenization 用到正则则是另外一回事了。
lincanbin
2014-07-23 19:23:18 +08:00
匹配数据用正则
解析html用解析DOM树的方法
binux
2014-07-23 19:48:37 +08:00
解析速度总是快于抓取速度
viowan
2014-07-23 20:07:08 +08:00
我觉得还是需要看需求吧,如果有一定的容错范围,并且解析的网页代码基本固定的用正则感觉没啥问题。如果对相应数据精确度要求高,解析的网页代码不固定,并且有些可能要通过执行js或者什么之类的才能获得,那还是不建议用JS。总之还是看需求。
azuginnen
2014-07-23 20:43:38 +08:00
@binux 对啊,我感觉这说的挺有道理,爬虫快了网站还要封你呢
tabris17
2014-07-23 22:57:41 +08:00
要看实际问题,只是做个爬虫抓取文本,正则就够了
zhanglp888
2014-07-24 12:45:10 +08:00
我做过一段时间的抓取html的工作,我是这样做的:
1.读取全部html后,用tidy这个工具,整理html(可转成utf-8)。
2.根据想要的东西读取内容,用的是xpath,用正则很难
xpath方面,用过phpquery这个工具
java方面: 看这个 -》 http://www.ibm.com/developerworks/cn/xml/x-javaxpathapi.html
php方面:看这个 -》 http://www.ibm.com/developerworks/cn/xml/x-datamineparsephp/

中间的问题有很多,很难完美解决
dingyaguang117
2014-07-24 13:26:57 +08:00
程序员要节省时间,简单粗暴第一准则

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/124132

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX