2010-07-09 19 views
8

Ich muss die Meta-Schlüsselwörter von einer Webseite mit Python extrahieren. Ich dachte, dass dies mit urllib oder urllib2 gemacht werden könnte, aber ich bin mir nicht sicher. Hat jemand Ideen?Meta-Schlüsselwörter aus der Webseite extrahieren?

Ich verwende Python 2.6 auf Windows XP

+0

Stellen Sie sicher, Caching von Inhalten https://developer.yahoo.com/python/python-caching.html, wann immer möglich verwenden – fedmich

Antwort

10

lxml ist schneller als BeautifulSoup (glaube ich) und hat viel bessere Funktionalität, während relativ einfach verbleibenden zu verwenden. Beispiel:

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"/> 

Edit: ein weiteres Beispiel.

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 ist wissenswert.

Ein weiterer edit:

Alternativ können Sie nur regexp verwenden:

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... 

... aber ich finde es weniger lesbar und fehleranfällig (aber nur Standardmodul beinhaltet und passt immer noch ein auf Linie).

+0

Ok, aber wo sind die Schlüsselwörter des Dokuments. Ich muss die Schlüsselwörter in den Metadaten gegen eine Liste überprüfen, die ich habe. –

+0

Wie Sie sehen können, sind sie in 'Inhalt' Attribut von '' Tag, das 'Name' Attribut ist 'Keywords' :) – cji

+0

Auch sicherstellen, dass Caching des Inhalts wann immer möglich verwenden https://developer.yahoo.com/ python/python-caching.html – fedmich

0

Warum nicht mit einem regulären Ausdruck

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

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

Weil http://StackOverflow.com/a/1732454/476716 – OrangeDog

Verwandte Themen