1

こんにちは、私はスクレイピーに取り組んでいます

以下は私のコードです

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 は、あなたを URLに置き換える文字を%探しています。しかし、最初に表示される可能性が高いのは、有効な書式文字ではありません。エラー メッセージには、何がどこで発生したかが正確に示されます。%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)
于 2012-06-15T06:53:49.143 に答える
-1

問題は、文字列補間iで整数としてマークするものですが、その文字列または別のものであると思います。iのタイプを確認してみてください。

于 2012-06-15T06:51:16.057 に答える