0

以下のスクレイピーフレームワークは私の Spider.py コードです

class Example(BaseSpider):
    name = "example"
    allowed_domains = {"http://www.example.com"}


start_urls = [
    "http://www.example.com/servlet/av/search&SiteName=page1"

]

def parse(self, response):
    hxs = HtmlXPathSelector(response)
    hrefs = hxs.select('//table[@class="knxa"]/tr/td/a/@href').extract()
    # href consists of all href tags and i am copying in to forwarding_hrefs by making them as a string 
    forwarding_hrefs = []
    for i in hrefs:
        forwarding_hrefs.append(i.encode('utf-8'))
    return Request('http://www.example.com/servlet/av/search&SiteName=page2',
                    meta={'forwarding_hrefs': response.meta['forwarding_hrefs']},
                   callback=self.parseJob)    


def parseJob(self, response):
    print response,">>>>>>>>>>>"

結果:

2012-07-18 17:29:15+0530 [example] DEBUG: Crawled (200) <GET http://www.example.com/servlet/av/search&SiteName=page1> (referer: None)
2012-07-18 17:29:15+0530 [MemorialReqionalHospital] ERROR: Spider error processing <GET http://www.example.com/servlet/av/search&SiteName=page2>
    Traceback (most recent call last):
      File "/usr/lib64/python2.7/site-packages/twisted/internet/base.py", line 1167, in mainLoop
        self.runUntilCurrent()
      File "/usr/lib64/python2.7/site-packages/twisted/internet/base.py", line 789, in runUntilCurrent
        call.func(*call.args, **call.kw)
      File "/usr/lib64/python2.7/site-packages/twisted/internet/defer.py", line 361, in callback
        self._startRunCallbacks(result)
      File "/usr/lib64/python2.7/site-packages/twisted/internet/defer.py", line 455, in _startRunCallbacks
        self._runCallbacks()
    --- <exception caught here> ---
      File "/usr/lib64/python2.7/site-packages/twisted/internet/defer.py", line 542, in _runCallbacks
        current.result = callback(current.result, *args, **kw)
      File "/home/local/user/project/example/example/spiders/example_spider.py", line 36, in parse
        meta={'forwarding_hrefs': response.meta['forwarding_hrefs']},
    exceptions.KeyError: 'forwarding_hrefs'

私がやろうとしているのは、すべての href タグを収集していることです。

http://www.example.com/servlet/av/search&SiteName=page1 

次のリクエストでこれを配置してforward_hrefs呼び出す(次のメソッドでこのリストforward_hrefsを使用したい)forward_urls

http://www.example.com/servlet/av/search&SiteName=page2

また、ページ2のhrefタグをforward_urlsに追加し、これをループしてforward_hrefs、各hrefタグのリクエストを生成したいと考えています。これは私の考えですが、上記のようにエラーが表示されています。アイテムをコピーします。forward_hrefsリストをparseメソッドからメソッドにコピーする方法を教えてくださいparseJob

forward_hrefs最後に、私の意図は、リストをparseメソッドからメソッドにコピーするparseJobことです。

うまく説明できたらいいのですが、そうでない場合はお知らせください....

前もって感謝します

4

1 に答える 1

1

何も試していませんが、ここにエラーがあるようです:

 return Request('http://www.example.com/servlet/av/search&SiteName=page2',
                meta={'forwarding_hrefs': response.meta['forwarding_hrefs']},
                callback=self.parseJob)    

response.meta['forwarding_hrefs'] を渡していますが、この応答には存在しません

あなたが置く必要があります:

 return Request('http://www.example.com/servlet/av/search&SiteName=page2',
                meta={'forwarding_hrefs': forwarding_hrefs},
                callback=self.parseJob)  

forwarding_hrefs フィールドがあり、この方法で送信してメタ内のジョブを解析し、メタ内で response.meta['forwarding_hrefs'] にアクセスできるため、その応答オブジェクトに存在します。

于 2012-07-18T12:33:44.943 に答える