Извлечь мета-ключевые слова с веб-страницы? - PullRequest
8 голосов
/ 09 июля 2010

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

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

Ответы [ 3 ]

10 голосов
/ 09 июля 2010

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"

Кстати: 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...

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

7 голосов
/ 09 июля 2010

BeautifulSoup - отличный способ для анализа HTML с Python.

В частности, проверьте метод findAll: http://www.crummy.com/software/BeautifulSoup/documentation.html

0 голосов
/ 23 октября 2013

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

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

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