正则表达式查询Python

2024-09-30 10:42:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图写一个脚本来刮一个网站,并正在使用这个(http://www.theericwang.com/scripts/eBayRead.py). 在

不过,我想用它来爬网网站以外的易趣,并定制我的需要。在

我对python还比较陌生,经验有限。在

我不确定这条线能达到什么目的。在

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

有人能给我点建议吗?在

如果我把它移植到其他站点,还有什么需要考虑的吗?在


Tags: py目的脚本comhttpurlfortitle
3条回答

正则表达式不适合解析HTML

以上是我想和你交流的主要想法。关于为什么,请参阅以下问题:RegEx match open tags except XHTML self-contained tags。在

简言之,HTML可以作为文本更改(例如,可以添加新属性、更改属性顺序或引入其他一些更改),但这将导致与web浏览器解释的完全相同的HTML,同时完全破坏脚本。在

应该使用专门的HTML解析器或web scraper来解析HTML。当差异变得显著时,他们就知道了。在

刮擦用什么?在

有多种解决方案,但最值得注意的是:ScraPy。试试看,你会开始喜欢它的。在

我不确定这是否能回答你的问题。但是你可以考虑用来抓取各种网站。它是一个很好的基础设施,提供了很大的灵活性,并且很容易根据某些特定的需要进行定制。在

一般来说,解析HTML最好使用beauthoulsoup这样的库来完成,它实际上为您处理了所有繁重的工作,留给您更直观的代码。另外,阅读@Tadeck下面的链接-如果可以避免的话,regex和HTML不应该混合使用(放轻松一点)。在

至于您的问题,这行代码使用“正则表达式”来查找文本中匹配的模式(在本例中是HTML)。re.findall()是一个返回列表的方法,因此如果我们只关注于此:

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

r表示以下内容将被解释为“原始”,即反斜杠等字符将按字面解释。在

^{pr2}$

括号表示一个组(我们在匹配中关心的内容),而[^"]+表示“匹配任何不是引号的内容”。正如您可能猜到的,这个组将返回链接的URL。在

.*class="vip"

.*匹配0次或更多次(这里可能包括其他标记、链接的右引号、空格等)。class="vip"没有什么特别之处,它只需要出现。在

title=\'([^\']+)', lines):

这里你看到一个转义引用,然后是另一组,正如我们上面看到的。这次,我们将捕获title标记后两个撇号之间的任何内容。在

最终的结果是遍历所有匹配项的列表,这些匹配项看起来像(my_matched_link, my_matched_title),这些匹配项被传递到for url, title,之后进行进一步的处理。在

相关问题 更多 >

    热门问题