1

嗨,我正在研究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,以及当我们提供一个没有格式说明符的单个整数时,我可以得到响应。请让我知道以上,

提前致谢。

4

2 回答 2

3

您的 URL 包含许多未转义%的符号,并且您正在尝试使用运算符将​​值插入到字符串中%。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 对字符的使用不冲突。

或者,特别是在这种情况下,由于您只想将变量附加到 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)
于 2012-06-15T06:53:49.143 回答
-1

我认为问题在于您在字符串插值 i 中将其标记为整数,但它的字符串或其他内容,请尝试检查 i 的类型。

于 2012-06-15T06:51:16.057 回答