Вопрос по scrapy, python – Scrapy - сканировать несколько страниц за элемент

2

Я пытаюсь просканировать несколько дополнительных страниц на элемент, чтобы получить информацию о местоположении.

В конце пункта перед возвратом я проверяю, нужно ли сканировать дополнительные страницы, чтобы получить информацию, по сути, эти страницы содержат некоторые сведения о местоположении и представляют собой простой запрос на получение.

То естьhttp://site.com.au/MVC/Offer/GetLocationDetails/?locationId=3761&companyId=206

Приведенная выше ссылка либо возвращает выбор с большим количеством страниц для сканирования, либо dd / dt с подробной информацией об адресе. В любом случае мне нужно извлечь эту информацию об адресе и добавить ее в мой элемент ['местоположения']

Пока что у меня есть (в конце разбора блок)

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)

Кажется, это не работает ....

Ваш Ответ

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 подкласс.

Ты должен сделатьyield item вместоyield loc
Так как же мне поступить так? AlexZ

Похожие вопросы