2010-07-09 1 views
8

Мне нужно извлечь мета-ключевые слова с веб-страницы с помощью Python. Я думал, что это можно сделать с помощью urllib или urllib2, но я не уверен. У кого-нибудь есть идеи?Извлечь Мета Ключевые слова с веб-страницы?

Я использую Python 2.6 на Windows XP

+0

Убедитесь использовать кэширование содержимого всякий раз, когда это возможно https://developer.yahoo.com/python/python-caching.html – fedmich

ответ

10

lxml работает быстрее, чем BeautifulSoup (я думаю), и имеет гораздо большую функциональность, оставаясь при этом относительно проста в использовании. Пример:

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

Редактировать: еще один пример.

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 стоит знать.

Другой редактировать:

В качестве альтернативы, вы можете просто использовать регулярное выражение:

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

... но я считаю его менее читабельным и более подвержен ошибкам (но включает в себя только стандартный модуль и до сих пор умещается на одной линия).

+0

Хорошо, но где ключевые слова документа. Мне нужно проверить ключевые слова в метаданных на список, который у меня есть. –

+0

Как вы можете видеть, они находятся в атрибуте 'content' '' тег, который 'name' атрибут является 'Keywords' :) – cji

+0

Также не забудьте использовать кеширование содержимого по возможности https://developer.yahoo.com/ python/python-caching.html – fedmich

0

Почему бы не использовать регулярное выражение

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

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

Потому что http://stackoverflow.com/a/1732454/476716 – OrangeDog