2012-05-30 20 views
-2

我嘗試編寫一個腳本來抓取我的網站。
但我堅持在「if語句」的第15行;它沒有進行比較。
我認爲這是一個編碼問題,或者包含其他字符。我猜。
文檔編碼爲ANSI,網站爲ISO-8859-15。如果語句在Python中不起作用

HParser.py:

from HTMLParser import HTMLParser 
from htmlentitydefs import name2codepoint 
import urllib2 

url = 'http://DOMAIN.TLD' 
req = urllib2.Request(url) 
response = urllib2.urlopen(req) 
the_page = response.read() 

class MyHTMLParser(HTMLParser): 
    def handle_starttag(self, tag, attrs): 
     tag = unicode(tag) 
     tag = tag.strip() 
     print "'",tag,"'" 
     if tag == 'a': 
      for attr in attrs: 
       if 'src' == attr[0]: 
        print 'Link: ', attr[1] 

    def handle_endtag(self, tag): 
     pass 

    def handle_data(self, data): 
     pass 

    def handle_comment(self, data): 
     pass 

    def handle_entityref(self, name): 
     pass 

    def handle_charref(self, name): 
     pass 

    def handle_decl(self, data): 
     pass 

parser = MyHTMLParser() 
parser.feed(the_page) 
+0

是否有助於將打印語句更改爲:print'tag:',repr(tag) – 2012-05-30 18:19:10

+0

print「'」,tag,「'」打印出來的內容是什麼?那麼print print =='a'呢? – benuuu

+1

你的'attrs'看起來像什麼?如果'attrs'是一個字符串列表,那麼'attr [0]'將永遠是第一個字母(所以它永遠不會是整個單詞「src'')。但是如果沒有看到你是如何得到這個診斷的,就很難說更多。 –

回答

1

我使用計算器主網頁的URL測試你的代碼一點點。這裏是我發現的:

1)tag == 'a'當它是'a'時評估爲正確。

2)attr打印出你想要的元組。例如:

('href', 'http://creativecommons.org/licenses/by-sa/3.0/') 
('class', 'cc-wiki-link') 

所以我認爲這意味着你從來沒有任何元組的第一個元素是'src'。當我解析主要的stackoverflow頁面時,我沒有得到任何attr [0]都是'src'的元組attr。

總之,問題是用線18

如果條件現在,我不知道HTML不夠好,知道了「SRC」屬性曾經與<a>標籤雲,但我通常使用<img>標記查看'src',使用<a>標記查看'href'。因此,您可能需要將第18行更改爲if attr[0] == 'href'

+0

所以它適合你?它是'如果tag =='a':'有問題。我在頁面上有鏈接,'print''「,tag,''」'打印我們的一個鏈接(鏈接)。 –

+0

你在哪些網址上運行你的代碼? 我可能誤解了你的問題。 –

+0

你沒有誤解這個問題,但我認爲是時候去睡覺了。我對所有這些小問題感到不安的道歉。 –