你好我正在研究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,当我们提供没有格式说明符的单个整数时我也能够得到响应。 请让我知道以上内容,
提前致谢。
答案 0 :(得分:3)
您的网址包含许多未转义的%
符号,您尝试使用%
运算符将值插入字符串。 Python正在寻找%
个字符来将i
替换为网址。但它看到的第一个可能是%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)
答案 1 :(得分:-1)
我认为问题是你在字符串插值中标记为整数但是字符串或其他字符,请尝试检查i的类型。