我正在尝试编写一个脚本来抓取网站,并且正在使用这个 (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
,之后进行进一步的处理。
关于python - 正则表达式查询 Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13391654/