python - 正则表达式查询 Python

标签 python regex screen-scraping

我正在尝试编写一个脚本来抓取网站,并且正在使用这个 (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/

相关文章:

Python根据网页上的序列号用数据填充sql

python - 什么时候在 pytest 中使用 fixture 而不是仅仅声明一个变量

javascript - 使用正则表达式操作带 html 标签的字符串

C的regexec匹配 '1111111'到 '^[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}$'

php - 简单的PHP屏幕抓取功能

python - 在Python中构建3维数据表面数据的三角网格

Python:当数据框中的行迭代在列的字符串中找到字母时添加一行

javascript 正则表达式匹配标签名称

python - 发布数据时无法筛选 ASP.Net 网站

python - 在 Scrapy 中使用 start_request 和使用 cookie 在网站上工作的正确方法是什么