0

我正在浏览一个 HTML 页面,我想提取 img srcs 和 a hrefs。

在特定站点上,所有这些都用双引号括起来。

我尝试了各种各样的正则表达式,但都没有成功。假设双引号内的字符为 [-\w/](可打印字符 [a-zA-Z\d-_] 和 / 和 .)

在蟒蛇中:

re.search(r'img\s+src="(?P<src>[\w-/]+_"', line)

不返回任何东西,但是

re.search(r'img\s+src="(?P[-\w[/]]+)"', line)

返回方式非常多(即,不会停在 " )。

我需要帮助创建正确的正则表达式。提前致谢!

4

3 回答 3

6

我需要帮助创建正确的正则表达式。

不,您需要帮助才能找到合适的工具。

试试BeautifulSoup

(如果您坚持使用正则表达式 - 我建议不要这样做 - 尝试将 greedy 更改+为 non-greedy +?)。

于 2012-04-27T15:53:21.943 回答
5

这是一个比使用正则表达式更好的方法的示例,它使用了出色的lxml库和xpath


In [1]: import lxml.html
In [2]: doc = lxml.html.parse('http://www.google.com/search?q=kittens&tbm=isch')
In [3]: doc.xpath('//img/@src')
Out[3]: 
['/images/nav_logo_hp2.png',
 'http://t1.gstatic.com/images?q=tbn:ANd9GcQhajNZimPGLw9iTfzrAF_HV5UogY-KGep5WYgw-VHZ15oaAwGquNb5Q2I',
 'http://t2.gstatic.com/images?q=tbn:ANd9GcS1LgVIlDgoIfNzwU4xBz9fL32ZJjZU26aB4aynRsEcz2VuXmjCtvxUonM',
 'http://t1.gstatic.com/images?q=tbn:ANd9GcRgouJt5Moe8uTnDPUFTo4csZOcBtEDA_B7WdRPe8pdZroR5QB2q_-LT59G',
 [...]
]
于 2012-04-27T16:06:33.057 回答
2

在引号内查找内容的好技巧"([^"]+)"。因此,您搜索除引号之间的引号以外的任何字符。

对于创建正则表达式的帮助,我强烈推荐 Expresso ( http://www.ultrapico.com/Expresso.htm )

于 2012-04-27T15:55:47.450 回答