2014-12-19 64 views
0

我有一個用例告訴,當一個標籤是link,它的屬性是rel=dns-prefetchprefetch然後只是說,預先解析dns啓用。如何使此代碼通用

我做了一個標誌爲pre_resolve_dns_enabled並將其設置爲true,如下所示。

class Extractor(HTMLParser): 

    def __init__(self): 
     HTMLParser.__init__(self) 
     self.pre_resolve_dns_enabled = False 

    def feed(self, data): 
     HTMLParser.feed(self,data) 

    def handle_starttag(self, tag, attrs): 
     if tag == 'link' and ('rel', 'dns-prefetch') in attrs: 
      self.pre_resolve_dns_enabled = True 
     if tag == 'link' and ('rel', 'prefetch') in attrs: 
      self.prefetch_enabled = True 

而且我寫了兩種方法來返回狀態。

def is_pre_resolve_dns_enabled(self): 
    return self.pre_resolve_dns_enabled 

def is_prefetch_enabled(self): 
    return self.prefetch_enabled 

有沒有一種辦法可以有效地使handle_starttag方法通用的,所以,我沒有硬編碼的標籤和查詢這樣的attars和擺脫is_pre_resolve_dns_enabledis_prefetch_enabled

+0

你有沒有想過使用第三方庫? – 2014-12-19 09:39:29

+0

我正在考慮在這裏使用美麗的湯 – station 2014-12-19 10:19:41

+0

您正在檢查哪個標籤?根標籤? – 2014-12-19 10:26:53

回答

0

如果你想和BS4要做到這一點,您可以使用此:

from bs4 import BeautifulSoup 
soup = BeautifulSoup(html) # Or some xml-like structure 
# This will select all link tags which have a rel attribute with value dns-prefetch. 
if len(soup.select('link[rel=dns-prefetch]')) > 0: 
    self.pre_resolve_dns_enabled = True 
if len(soup.select('link[rel=prefetch]')) > 0: 
    self.prefetch_enabled = True 
+0

但是,這又是硬編碼的值 – station 2014-12-19 11:32:42

+0

您的意思是字符串鏈接[rel = dns-prefetch]?它很清楚你想要什麼 – 2014-12-19 11:40:49

+0

我解決了它。謝謝 – station 2014-12-19 11:52:01