2012-02-04 62 views
1

我已經寫了scrapy蜘蛛來刮出一些html標籤。現在的問題是,這個蜘蛛完美地工作在互聯網上運行的網址,但不是在本地主機上的網址。我的意思是,蜘蛛生成本地計算機上資源的url時出現錯誤,即使url完全正確,並且對於正在運行的站點的url時相同的資源正常工作。 有人可以清除我的這個疑問嗎?python scrapy能在localhost上正常工作嗎?

def parse(self, response): 
    hxs = HtmlXPathSelector(response) 
    con = MySQLdb.connect(host="localhost", 
          user = "username", 
          passwd="psswd", 
          db ="dbname") 
    cur = con.cursor() 
    title = hxs.select("//h3")[0].extract() 
    desc = hxs.select("//h2").extract() 
    a = hxs.select("//meta").extract() 
    cur.execute("""Insert into heads(h2) Values(%s)""",(a)) 
    con.commit() 
    con.close() 
+0

它產生了什麼錯誤?你使用本地計算機資源的'http:'url還是'file:'url? – 2012-02-04 19:16:36

+0

嘿布魯克斯。我用locahost的http:url也添加了我的代碼。在這個代碼中。即產生的錯誤是:標題= hxs.select(「// H3」)[0] .extract() \t exceptions.IndexError:列表索引超出範圍 – user1153986 2012-02-04 19:28:09

回答

1

在這條線

title = hxs.select("//h3")[0].extract() 

誤差

exceptions.IndexError: list index out of range 

指示列表hxs.select("//h3")爲空([]),因爲嘗試訪問第一個條目以hxs.select("//h3")[0]用途(索引0) Python告訴我們的索引超出範圍。

您正在解析的html顯然沒有<h3>標籤。


而且,你解決上述錯誤之後,你需要把一個逗號a(a,)後:

cur.execute("""Insert into heads(h2) Values(%s)""",(a,)) 

(a)評估爲a,而(a,)表示含1元組元素裏面。

+0

但是這並沒有對錯誤的任何效果。 – user1153986 2012-02-04 19:43:27

+0

以及這正是問題所在。這個相同的代碼適用於非本地主機url,並在本地主機上的url上產生錯誤。原因可能是什麼? – user1153986 2012-02-05 03:57:34

+0

檢查HTML(通過打印語句或讀取文件,或使用瀏覽器查看源代碼的能力)。不同服務器返回的HTML有所不同。 – unutbu 2012-02-05 11:34:23

相關問題