Skip to main content
 首页 » 编程设计

python之正则表达式查询 Python

2025年05月04日23xing901022

我正在尝试编写一个脚本来抓取网站,并且正在使用这个 (http://www.theericwang.com/scripts/eBayRead.py)。

但是我想用它来抓取 ebay 以外的网站,并根据我的需要进行定制。

我是 python 的新手,经验有限。

我不确定这条线实现了什么。

for url, title in re.findall(r'href="([^"]+).*class="vip" title=\'([^\']+)', lines): 

有人可以给我一些指示吗?

如果我将此移植到其他网站,我还需要考虑什么吗?

请您参考如下方法:

一般来说,解析 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,之后进行进一步的处理。