Python 这个re.compile()表达式不应该找到页面中的所有链接吗?
我很难理解python中的re.compile方法。我找到了这个例子,从我读到的内容来看,应该可以找到一个网页中的所有链接。这是正确的吗?有人能解释一下吗?表达的一部分?这对我来说没有多大意义,而且似乎也无法在页面中找到链接Python 这个re.compile()表达式不应该找到页面中的所有链接吗?,python,parsing,hyperlink,Python,Parsing,Hyperlink,我很难理解python中的re.compile方法。我找到了这个例子,从我读到的内容来看,应该可以找到一个网页中的所有链接。这是正确的吗?有人能解释一下吗?表达的一部分?这对我来说没有多大意义,而且似乎也无法在页面中找到链接 link_finder = re.compile('href="(.*?)"') links = link_finder.findall(html) 这是一个非贪婪表达式,用于匹配一对双引号之间的所有字符。非贪婪意味着一旦找到下一个双引号,它将停止搜索 相反,一个贪婪的表
link_finder = re.compile('href="(.*?)"')
links = link_finder.findall(html)
这是一个非贪婪表达式,用于匹配一对双引号之间的所有字符。非贪婪意味着一旦找到下一个双引号,它将停止搜索
相反,一个贪婪的表情
"(.*)"
不会在它找到的下一个双引号处停止-它将继续,直到它到达当前行的最后一个引号-因此使用贪婪这个词,而不是本例中所需的
它可能找不到任何适合您的内容,因为您的所有链接都使用单引号而不是双引号引用。那样的话,试试看
link_finder = re.compile("href='(.*?)'")
请注意,单引号和双引号的位置是交换的
示例输出:
>>> link_finder = re.compile("href='(.*?)'")
>>> links = link_finder.findall("<a href='testlink'>")
>>> links
['testlink']
它将匹配空格以及两种类型的引号。但是,正如Ken Hampson所建议的那样,更好的方法是使用专用工具,或者。要真正找到文档中的所有HTML链接,它比正则表达式所支持的更细微
例如,以下任一标记都是有效的HTML:
<a href='foo.html'>foo</a>
<a href = 'foo2.html'>foo2</a>
但是,除了单引号对和双引号对之外,还有其他细微差别。这只是另一个例子,这又回到了使用正则表达式解析HTML或XML等内容的整个过程中。。最好使用一个实际的HTML解析器来实现这一点,因为所有这些细微差别都被考虑进去了,因为解析器必须考虑语言的整个语法
如果您在web上下文中操作,jQuery实际上可能是最好的选择,因为它将通过一行程序搜索DOM
对于纯Python,lxml是一种可能性。谢谢!!!这解释了很多。我在任何地方都找不到这样的简化。使用beautifulsoup,忘记用regexYa解析html,这就是我要做的。
re.compile("href\s*=\s*['\"](.*?)['\"]")
<a href='foo.html'>foo</a>
<a href = 'foo2.html'>foo2</a>
link_finder = re.compile("href\s*=\s*'(.*?)'")