我有一个正则表达式,links = re.compile('<a(.+?)href=(?:"|\')?((?:https?://|/)[^\'"]+)(?:"|\')?(.*?)>(.+?)</a>',re.I).findall(data)
优化蟒蛇链接匹配的正则表达式
找到一些HTML链接,它走的是一条很长一段时间对某些HTML,任何优化建议吗?
之一,它扼流圈是http://freeyourmindonline.net/Blog/
我有一个正则表达式,links = re.compile('<a(.+?)href=(?:"|\')?((?:https?://|/)[^\'"]+)(?:"|\')?(.*?)>(.+?)</a>',re.I).findall(data)
优化蟒蛇链接匹配的正则表达式
找到一些HTML链接,它走的是一条很长一段时间对某些HTML,任何优化建议吗?
之一,它扼流圈是http://freeyourmindonline.net/Blog/
有没有使用HTML解析器的原因吗?使用像BeautifulSoup这样的东西,你可以得到所有的链接,而不用像这样的丑陋的正则表达式。
是否有可能获得正则表达式的所有数据获得?链接,锚文本和a和href之间的位以及href之后直到标签的结尾? – Matt 2010-05-31 18:47:08
@Matt:我发现很难理解你的正则表达式在做什么,但是HTML解析器的总体思想是它们可以很容易地解析HTML。我确信,一旦你阅读了文档,你试图做的非常简单。 – 2010-05-31 18:56:06
是的,非常非常。这似乎是你的问题的副本,并且回答如下:http://stackoverflow.com/questions/1080411/retrieve-links-from-web-page-using-python-and-beautiful-soup – Daenyth 2010-05-31 18:58:02
我建议使用BeautifulSoup这个任务。
如何更直接地处理href的?
re_href = re.compile(r"""<\s*a(?:[^>]+?)href=("[^"]*(\\"[^"]*)*"|'[^']*(\\'[^']*)*'|[^\s>]*)[^>]*>""", re.I)
这需要大约0.007秒comparsion你findall
这需要我的电脑上38.694秒。
请尽量避免使用正则表达式解析HTML。 – 2010-05-31 18:40:49
强制性链接:http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – 2010-05-31 18:47:31