2010-07-09 38 views
8

Tôi cần trích xuất các từ khóa meta từ một trang web bằng Python. Tôi đã nghĩ rằng điều này có thể được thực hiện bằng cách sử dụng urllib hoặc urllib2, nhưng tôi không chắc chắn. Ai có ý tưởng gì không?Trích xuất Từ khoá Meta Từ Trang web?

Tôi đang sử dụng Python 2.6 trên Windows XP

+0

Hãy chắc chắn để sử dụng bộ nhớ đệm của các nội dung bất cứ khi nào có thể https://developer.yahoo.com/python/python-caching.html – fedmich

Trả lời

10

lxml là nhanh hơn so với BeautifulSoup (tôi nghĩ) và có chức năng tốt hơn, trong khi vẫn tương đối dễ sử dụng. Ví dụ:

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

Chỉnh sửa: ví dụ khác.

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 đáng để biết.

Một biên tập:

Ngoài ra, bạn chỉ có thể sử dụng 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... 

... nhưng tôi thấy nó ít có thể đọc được và báo lỗi hơn dễ bị (nhưng chỉ liên quan đến mô-đun tiêu chuẩn và vẫn phù hợp trên một hàng).

+0

Ok, nhưng mà là từ khóa của tài liệu. Tôi cần kiểm tra các từ khóa trong dữ liệu meta dựa vào danh sách mà tôi có. –

+0

Như bạn có thể thấy chúng nằm trong thuộc tính 'nội dung' của ' 'thẻ' thuộc tính 'tên' là 'Từ khoá' :) – cji

+0

Cũng đảm bảo sử dụng bộ nhớ đệm của nội dung bất cứ khi nào có thể https://developer.yahoo.com/ python/python-caching.html – fedmich

0

Tại sao không sử dụng một biểu thức chính quy

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

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

Bởi vì http://stackoverflow.com/a/1732454/476716 – OrangeDog

Các vấn đề liên quan