[问题] 有关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