[問題] 有關HTMLParser

作者: lexus7310 (Fox)   2017-11-09 00:04:21
import urllib.request
from html.parser import HTMLParser
class MyHTMLParser(HTMLParser): #orverride方法來做條件判斷
def __init__(self):
HTMLParser.__init__(self)
self.isNumber= 0
self.list= [ ]
def handle_data(self, data):#解析網頁資料
if self.isNumber== 1:
#print('有資料')
self.list.append(data)
self.isNumber= 0
def handle_starttag(self, tag, attrs):#解析網頁起始標籤
if tag == 'a' and attrs == [('target','_blank')]:
#print('有屬性')
self.isNumber= 1
def handle_endtag(self, tag):#解析網頁結束標籤
pass
data = urllib.request.urlopen('https://tw.yahoo.com/')#向網頁發出請求
content = data.read().decode('utf-8')#擷取網頁資料
data.close( )#關閉連線
#print(content)
myparser = MyHTMLParser()
myparser.feed(content)#feed()會依 HTML文件內標籤的順序依序處理
#print(myparser.list)
print(myparser.list ,file=open('data.txt','w',encoding='utf-8'))#寫入data.txt'
程式碼如上,我想請問為何我在handle_starttag的function裡面
只要加上attrs == [('target','_blank')]的描述,我的if條件式就永遠不會成立,謝謝
作者: stucode   2017-11-09 01:16:00
attrs == [('target', '_blank')] 會找到「只有」target="_blank" 屬性的元素。一直不成立表示該頁面沒有符合這個條件的元素。如果想找所有包含該屬性的元素,請用 ('target', '_blank') in attrs。
作者: lexus7310 (Fox)   2017-11-09 22:53:00
懂了 感謝

Links booklink

Contact Us: admin [ a t ] ucptt.com