2010-07-09 24 views
8

J'ai besoin d'extraire les méta-mots-clés d'une page Web en utilisant Python. Je pensais que cela pourrait être fait en utilisant urllib ou urllib2, mais je ne suis pas sûr. Quelqu'un a des idées?Extraire les mots-clés Meta à partir de la page Web?

J'utilise Python 2.6 sous Windows XP

+0

Assurez-vous d'utiliser la mise en cache du contenu chaque fois que possible https://developer.yahoo.com/python/python-caching.html – fedmich

Répondre

10

lxml est plus rapide que BeautifulSoup (je pense) et a beaucoup de meilleures fonctionnalités, tout en restant relativement facile à utiliser. Exemple:

52> from urllib import urlopen 
53> from lxml import etree 

54> f = urlopen("http://www.google.com").read() 
55> tree = etree.HTML(f) 
61> m = tree.xpath("//meta") 

62> for i in m: 
..>  print etree.tostring(i) 
..> 
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-2"/> 

Editer: un autre exemple.

75> f = urlopen("http://www.w3schools.com/XPath/xpath_syntax.asp").read() 
76> tree = etree.HTML(f) 
85> tree.xpath("//meta[@name='Keywords']")[0].get("content") 
85> "xml,tutorial,html,dhtml,css,xsl,xhtml,javascript,asp,ado,vbscript,dom,sql,colors,soap,php,authoring,programming,training,learning,b 
eginner's guide,primer,lessons,school,howto,reference,examples,samples,source code,tags,demos,tips,links,FAQ,tag list,forms,frames,color table,w3c,cascading 
style sheets,active server pages,dynamic html,internet,database,development,Web building,Webmaster,html guide" 

BTW: XPath vaut la peine d'être connu.

Une autre édition:

Alternativement, vous pouvez simplement utiliser regexp:

87> f = urlopen("http://www.w3schools.com/XPath/xpath_syntax.asp").read() 
88> import re 
101> re.search("<meta name=\"Keywords\".*?content=\"([^\"]*)\"", f).group(1) 
101>"xml,tutorial,html,dhtml,css,xsl,xhtml,javascript,asp,ado,vbscript,dom,sql, ...etc... 

... mais je trouve moins lisible et plus d'erreurs (mais implique que le module standard et se glisse sur un ligne).

+0

Ok, mais où sont les mots-clés du document. J'ai besoin de vérifier les mots-clés dans les méta-données par rapport à une liste que j'ai. –

+0

Comme vous pouvez le voir, ils sont dans l'attribut 'content' de '' tag dont l'attribut 'name' est 'Keywords' :) – cji

+0

Assurez-vous également d'utiliser la mise en cache du contenu autant que possible https://developer.yahoo.com/ python/python-cache.html – fedmich

0

Pourquoi ne pas utiliser une expression régulière

keywordregex = re.compile('<meta\sname= 
["\']keywords["\']\scontent=["\'](.*?)["\']\s/>') 

keywordlist = keywordregex.findall(html) 
if len(keywordlist) > 0: 
    keywordlist = keywordlist[0] 
    keywordlist = keywordlist.split(", ") 
+0

Parce que http://stackoverflow.com/a/1732454/476716 – OrangeDog