一般来说,解析 HTML 最好使用 BeautifulSoup 之类的库,它几乎可以为您处理所有繁重的工作,为您留下更直观的代码。另外,请阅读下面的@Tadeck 链接 - 如果可以避免正则表达式和 HTML,则不应混合使用(轻描淡写)。
至于您的问题,该行使用称为“正则表达式”的东西来查找文本中的匹配模式(在本例中为 HTML)。re.findall()
是一个返回列表的方法,所以如果我们只关注它:
re.findall(r'href="([^"]+).*class="vip" title=\'([^\']+)', lines):
r
表示以下内容将被解释为“原始”,这意味着反斜杠等字符将按字面意思解释。
href="([^"]+)
括号表示一个组(我们在匹配中关心的内容),[^"]+
意思是“匹配任何不是引用的东西”。正如您可能猜到的那样,该组将返回链接的 URL。
.*class="vip"
匹配任何东西(嗯,.*
几乎任何东西)0 次或更多次(这里可能包括其他标签、链接的结束引号、空格等)。没什么特别的class="vip"
——它只需要出现。
title=\'([^\']+)', lines):
在这里,您会看到一个转义的引用,然后是我们在上面看到的另一个组。这一次,我们将捕获title
标记后两个撇号之间的任何内容。
这样做的最终结果是您正在遍历所有匹配项的列表,这些匹配项看起来像(my_matched_link, my_matched_title)
,被传递到for url, title
,之后进行进一步处理。