在python中快速解析页面外的链接

在python中快速解析页面外的链接,python,parsing,beautifulsoup,Python,Parsing,Beautifulsoup,我需要解析大量页面(比如1000页),并用tinyurl链接替换这些链接 现在我用正则表达式来做这个 href_link_re = re.compile(r"<a[^>]+?href\s*=\s*(\"|')(.*?)\1[^>]*>", re.S) (测试是维基百科头版的转储) 我一定是汤用得不好我做错了什么?由于速度和regexp指数时间问题,使用regexp进行解析的想法非常糟糕。 相反,您可以使用xhtml解析器。最好的是。 或者您可以使用LL、LR解析器专门为

我需要解析大量页面(比如1000页),并用tinyurl链接替换这些链接

现在我用正则表达式来做这个

href_link_re = re.compile(r"<a[^>]+?href\s*=\s*(\"|')(.*?)\1[^>]*>", re.S)
(测试是维基百科头版的转储)


我一定是汤用得不好我做错了什么?

由于速度和regexp指数时间问题,使用regexp进行解析的想法非常糟糕。 相反,您可以使用xhtml解析器。最好的是。
或者您可以使用LL、LR解析器专门为此编写解析器。例如:,,,,etc

LXML可能是完成此任务的最佳选择。看见在LXML中解析链接很容易,而且速度很快

root = lxml.html.fromstring(s)
anchors = root.cssselect("a")
links = [a.get("href") for a in anchors]

难道你不能先寻找
yes来简化你的代码吗?这就是状态机路径为什么HTML解析器要比正则表达式快?此外,BeautifulSoup主要是Python代码,而re模块是C。每次发布涉及使用正则表达式解析html的问题时,我都记得这篇传奇的SO帖子。哪个更快:LXML还是靓汤?我一直在使用后者,但现在似乎更经常地推荐前者。XML是本机解析器,而Beauty Soup使用reg EXP进行解析。所以LXML更好。
regex time taken: 0.00451803207397 found links: 2450
soup time taken: 0.791836977005 found links: 2450
root = lxml.html.fromstring(s)
anchors = root.cssselect("a")
links = [a.get("href") for a in anchors]