2012-04-27 111 views
0

我爬过一个HTML页面,我想提取img srcs和一个hrefs。正则表达式来解析HTML imgs

在特定的网站上,它们都被封装在双引号中。

我试过各种各样的正则表达式没有成功。假定双引号内的字符将是[ - \ W /](可打印的字符[A-ZA-Z \ d-_]和/和。)

在蟒:

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

隐而不宣” T回流什么,但

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

返回wayy得多(即,不会在“停止)。

我需要帮助创建预先正确的正则表达式。谢谢!

+1

Obligatory:http://stackoverflow.com/a/1732454/350351 – Daenyth 2012-04-27 15:54:57

+0

确实,不能用正则表达式来解析html,但是你可以在里面找到某些东西,对于快速脚本等等,它可能是正确的工具。 – OlliM 2012-04-27 15:58:00

+0

@达尼,是的,我知道。我已经为定期和上下文无关语法的抽象引理指导了许多人。我试图找到的正则表达式只是标签内的一个字段,这当然是非常规则的。 – 2012-04-27 16:04:49

回答

2

一个很好的诀窍,可以在你做的引号内找到东西"([^"]+)"。所以你搜索任何字符,但是引号之间的引号。

有关创建正则表达式,我可以强烈推荐快报帮助(http://www.ultrapico.com/Expresso.htm

6

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

不,您需要寻找合适工具的帮助。

尝试BeautifulSoup

(如果您上使用正则表达式坚持 - 我会建议反对 - 尝试改变贪婪+非贪婪+?)。

+2

或[lxml](http://lxml.de/)用于'xpath'支持。 – RanRag 2012-04-27 15:54:09

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', 
[...] 
]