2

位置情報を取得するために、アイテムごとにいくつかの余分なページをクロールしようとしています。

アイテムの最後で、情報を取得するために余分なページをクロールする必要があるかどうかを確認します。基本的に、これらのページには場所の詳細が含まれており、単純な get リクエストです。

すなわちhttp://site.com.au/MVC/Offer/GetLocationDetails/?locationId=3761&companyId=206

上記のリンクは、クロールするページを含む select を返すか、アドレスの詳細を含む dd/dt を返します。いずれにせよ、この住所情報を抽出してアイテムに追加する必要があります['locations']

これまでのところ(解析ブロックの最後)

return self.fetchLocations(locations_selector, company_id, item)

location_selector には、locationIds のリストが含まれています

で、〜がある

def fetchLocations(self, locations, company_id, item): #response):
    for location in locations:
        if len(location)>1:
            yield Request("http://site.com.au/MVC/Offer/GetLocationDetails/?locationId="+location+"&companyId="+company_id,
            callback=self.parseLocation,
                meta={'company_id': company_id, 'item': item})

そして最後に

def parseLocation(self,response):
    hxs = HtmlXPathSelector(response)
    item = response.meta['item']

    dl = hxs.select("//dl")
    if len(dl)>0:
        address = hxs.select("//dl[1]/dd").extract()
        loc = {'address':remove_entities(replace_escape_chars(replace_tags(address[0], token=' '), replace_by=''))}
        yield loc

    locations_select = hxs.select("//select/option/@value").extract()
    if len(locations_select)>0:
        yield self.fetchLocations(locations_select, response.meta['company_id'], item)

これを機能させることはできません....

4

1 に答える 1

2

これはあなたのコードです:

def parseLocation(self,response):
    hxs = HtmlXPathSelector(response)
    item = response.meta['item']

    dl = hxs.select("//dl")
    if len(dl)>0:
        address = hxs.select("//dl[1]/dd").extract()
        loc = {'address':remove_entities(replace_escape_chars(replace_tags(address[0], token=' '), replace_by=''))}
        yield loc

    locations_select = hxs.select("//select/option/@value").extract()
    if len(locations_select)>0:
        yield self.fetchLocations(locations_select, response.meta['company_id'], item)

コールバックは、リクエストを他のページまたはアイテムに返す必要があります。上記のコードでは、生成されたリクエストが表示されますが、アイテムは表示されません。を持ってyield locいますが、サブクラスlocではありdictません。Item

于 2012-06-22T06:41:58.717 に答える