Скребок не дает результатов в петле? - PullRequest
0 голосов
/ 13 мая 2019

Я пытался рекурсивно очистить некоторые результаты поиска из регистра компании.В основном это работает, но я заметил, что пропускаю много результатов поиска в моем экспорте.Когда я пытаюсь очистить только 1 страницу, я замечаю, что ей удается найти страницу с результатами поиска, но каким-то образом пытается повторно войти на страницу, на которой она уже есть?Это делается только для немногих .. Первый результат в порядке и дал.Я проверяю мои пути CSS, которые в порядке.Вы понимаете почему?Заранее большое спасибо.

Вот мой журнал ошибок:

> 2019-05-13 08:25:37 [scrapy.core.engine] DEBUG: Crawled (200) <GET
> https://www.companiesintheuk.co.uk/ltd/aw> (referer:
> https://www.companiesintheuk.co.uk/Company/Find?q=a) 2019-05-13
> 08:25:38 [scrapy.core.scraper] ERROR: Spider error processing <GET
> https://www.companiesintheuk.co.uk/ltd/aw> (referer:
> https://www.companiesintheuk.co.uk/Company/Find?q=a) Traceback (most
> recent call last):   File
> "/usr/local/lib/python2.7/dist-packages/scrapy/utils/defer.py", line
> 102, in iter_errback
>     yield next(it)   File "/usr/local/lib/python2.7/dist-packages/scrapy/spidermiddlewares/offsite.py",
> line 29, in process_spider_output
>     for x in result:   File "/usr/local/lib/python2.7/dist-packages/scrapy/spidermiddlewares/referer.py",
> line 339, in <genexpr>
>     return (_set_referer(r) for r in result or ())   File "/usr/local/lib/python2.7/dist-packages/scrapy/spidermiddlewares/urllength.py",
> line 37, in <genexpr>
>     return (r for r in result or () if _filter(r))   File "/usr/local/lib/python2.7/dist-packages/scrapy/spidermiddlewares/depth.py",
> line 58, in <genexpr>
>     return (r for r in result or () if _filter(r))   File "/root/Desktop/zakaria/gov2/gov2/spiders/CYRecursive.py", line 41, in
> parse_details
>     'postal_code': re.sub('\s+', ' ', ''.join(i.css("#content2 > strong:nth-child(2) > address:nth-child(2) > div:nth-child(1) >
> a:nth-child(5) > span:nth-child(1)::text").extract_first())),
> TypeError: can only join an iterable

Вот мой код:

import scrapy
import re
from scrapy.linkextractors import LinkExtractor


class QuotesSpider(scrapy.Spider):

  name = 'CYRecursive'
  start_urls = [
      'https://www.companiesintheuk.co.uk/Company/Find?q=a']

  def parse(self, response):

    for company_url in response.xpath('//div[@class="search_result_title"]/a/@href').extract():
      yield scrapy.Request(
          url=response.urljoin(company_url),
          callback=self.parse_details,
      )


#      next_page_url = response.xpath(
#          '//li/a[@class="pageNavNextLabel"]/@href').extract_first()
#      if next_page_url:
#          yield scrapy.Request(
#              url=response.urljoin(next_page_url),
#              callback=self.parse,
#          )


  def parse_details(self, response):

    # Looping throught the searchResult block and yielding it

    for i in response.css('div.col-md-6'):
      yield {
          'company_name': re.sub('\s+', ' ', ''.join(i.css('#content2 > strong:nth-child(2) > strong:nth-child(1) > div:nth-child(1)::text').get())),
          'address': re.sub('\s+', ' ', ''.join(i.css("#content2 > strong:nth-child(2) > address:nth-child(2) > div:nth-child(1) > span:nth-child(1)::text").extract_first())),
          'location': re.sub('\s+', ' ', ''.join(i.css("#content2 > strong:nth-child(2) > address:nth-child(2) > div:nth-child(1) > span:nth-child(3)::text").extract_first())),
          'postal_code': re.sub('\s+', ' ', ''.join(i.css("#content2 > strong:nth-child(2) > address:nth-child(2) > div:nth-child(1) > a:nth-child(5) > span:nth-child(1)::text").extract_first())),
      }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...