2012-06-15 66 views
1

你好我是scrapyexceptions.ValueError:Python中scrapy不支持的格式字符

下面的工作是我的代碼

class examplespider(CrawlSpider): 
    name = "example" 
    domain_name = "www.example.com" 
    start_urls = ["http://www.example.com/sch/mobile-/67939/i.html?_catref=1"] 

def parse(self,response): 
    hxs = HtmlXPathSelector(response) 
    for i in xrange(1,10): 
     yield Request(url="http://www.example.com/sch/mobile-/67939/i.html?_catref=1?_trkparms=65%253A12%257C66%253A1%257C39%253A1%257C72%253A3276&rt=nc&_catref=1&_dmpt=IN_Mobile_Phones&_trksid=p3286.c0.m14.l1513&_pgn=%d"%i, 
           callback=self.parse_item) 
def parse_item(self,response): 
    print response,"Here it is................." 

結果:

File "/home/local/username/project/example/example/spiders/example_spider.py", line 117, in parse 
    yield Request(url="http://www.example.com/sch/mobile-/67939/i.html?_catref=1?_trkparms=65%253A12%257C66%253A1%257C39%253A1%257C72%253A3276&rt=nc&_catref=1&_dmpt=IN_Mobile_Phones&_trksid=p3286.c0.m14.l1513&_pgn=%d"%i, 
           callback=self.parse_item) 
    exceptions.ValueError: unsupported format character 'A' (0x41) at index 61 

任何一個可以告訴我什麼是錯誤的代碼,爲什麼不支持的格式字符代碼錯誤顯示,無論是在這裏不支持URL,當我們提供一個單一的整數t格式說明符我能夠得到迴應。 請讓我知道上面,

在此先感謝。

回答

3

您的網址包含許多未轉義的符號,您正嘗試使用%運算符將值內插到字符串中。 Python正在尋找%字符來替換您的i到URL中。但它看到的第一個可能是%A,這不是一個有效的格式字符。錯誤信息甚至會告訴你發生了什麼事以及在哪裏。

也許最簡單的一般解決方法是使用字符串代替%運營商的.format()方法:

("http://www.example.com/sch/mobile-/67939/i.html?_catref=1?" 
"_trkparms=65%253A12%257C66%253A1%257C39%253A1%257C72%253A3276&rt=nc" 
"&_catref=1&_dmpt=IN_Mobile_Phones&_trksid=p3286.c0.m14.l1513&_pgn={0}").format(i) 

它使用不同的格式佔位符不符合您的網址的使用%性格衝突。

或者說,在這種情況下,具體地講,因爲你只是想你的變量追加到URL,你可以使用直線上升串聯:

("http://www.example.com/sch/mobile-/67939/i.html?_catref=1?" 
"_trkparms=65%253A12%257C66%253A1%257C39%253A1%257C72%253A3276&rt=nc" 
"&_catref=1&_dmpt=IN_Mobile_Phones&_trksid=p3286.c0.m14.l1513&_pgn=") + str(i) 
+0

非常感謝你的工作,我非常清楚第二個關於字符串concatanation,但在第一個解決方案「l1513&_pgn = {0}」,實際上這裏會發生什麼,如果l1513&_pgn = {i} ,對不起,我真的不知道這個概念可以讓我知道它。 –

+0

此處循環重複10次,對於某些響應,結果爲2012-06-15 13:03:32 + 0530 [spi] DEBUG:將(301)重定向到 from ,爲什麼在這裏重定向 –

+0

'format()'示例中的{0}表示使用參數0,即第一個參數,即「i」。 – kindall

-1

我認爲問題是你在你的字符串插值標記爲整數,但它的字符串或別的東西,請嘗試檢查我的類型。

+0

:我已嘗試類型(I),其整數 –

+0

上面你有正確答案A不是格式字符。 – Denis

+0

@ Dennis:其實我很懷疑,我知道我不應該在這裏問,所以我創建了一個新帖子http://stackoverflow.com/questions/11045510/empty-list-returning-by-xpath-in-scrapy ,你可以看看它 –