Как сделать так, чтобы скраплер не экспонировал результаты экспоненциально? - PullRequest
0 голосов
/ 07 февраля 2019

Итак, я довольно новичок в Python и пытаюсь создать сканер scrapy для извлечения данных о дистрибьюторах с сайта.Но я не получаю ожидаемых результатов.Это мой код:

class QuotesSpider(scrapy.Spider):
    name = "final_url"

    def start_requests(self):
        urls = [
       "https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/dealerslist/almagro/2675585174/?countrySelectorCode=AR"
        ]


        for url in urls:
             yield scrapy.Request(url=url, callback=self.parse)


    def parse(self, response):

         urls_ = []
         for item in response.css('div.row.m-dealer_list__row'):

             half_urls_ = item.css('div.m-dealer_list__addr       a.link.trackingElement::attr(href)').getall()

            for half in half_urls_:
                 urls_.append('https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/' + half)

                with open('sub_urls.txt', 'a') as doc:
                    doc.write(str(urls_))

Я ожидал ссылку (href) на каждого дистрибьютора -5 в этом случае - где я могу извлечь имя, адрес, почту, телефон и сайт.Вместо этого я получаю этот запутанный результат:

['https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/localizador-de-distribuidores/distribuidor/boschla00077/almagro/colombo-fernando-javier/?countrySelectorCode=AR']
['https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/localizador-de-distribuidores/distribuidor/boschla00077/almagro/colombo-fernando-javier/?countrySelectorCode=AR', 
'https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/localizador-de-distribuidores/distribuidor/boschla00417/almagro/easy-rivadavia-%28e164%29-cencosud/?countrySelectorCode=AR']
['https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/localizador-de-distribuidores/distribuidor/boschla00077/almagro/colombo-fernando-javier/?countrySelectorCode=AR', 
'https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/localizador-de-distribuidores/distribuidor/boschla00417/almagro/easy-rivadavia-%28e164%29-cencosud/?countrySelectorCode=AR', 
'https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/localizador-de-distribuidores/distribuidor/boschla00506/almagro/g-y-p-new-tree-s.a/?countrySelectorCode=AR']
['https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/localizador-de-distribuidores/distribuidor/boschla00077/almagro/colombo-fernando-javier/?countrySelectorCode=AR', 
'https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/localizador-de-distribuidores/distribuidor/boschla00417/almagro/easy-rivadavia-%28e164%29-cencosud/?countrySelectorCode=AR', 
'https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/localizador-de-distribuidores/distribuidor/boschla00506/almagro/g-y-p-new-tree-s.a/?countrySelectorCode=AR', 
'https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/localizador-de-distribuidores/distribuidor/boschla00303/almagro/medrano-construcciones-s./?countrySelectorCode=AR']
['https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/localizador-de-distribuidores/distribuidor/boschla00077/almagro/colombo-fernando-javier/?countrySelectorCode=AR', 
'https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/localizador-de-distribuidores/distribuidor/boschla00417/almagro/easy-rivadavia-%28e164%29-cencosud/?countrySelectorCode=AR', 
'https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/localizador-de-distribuidores/distribuidor/boschla00506/almagro/g-y-p-new-tree-s.a/?countrySelectorCode=AR', 
'https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/localizador-de-distribuidores/distribuidor/boschla00303/almagro/medrano-construcciones-s./?countrySelectorCode=AR', 
'https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/localizador-de-distribuidores/distribuidor/boschla00304/almagro/medrano-construcciones-s.a./?countrySelectorCode=AR']

Я думал, что это может быть связано с режимом 'a' в функции .write, но если я использую 'w', я просто получаю последнюю ссылку.И этот URL, который я привожу, только один из более чем 700, поэтому созданный исходный текст .text был довольно большим и бесполезным.

Заранее благодарим за любую помощь, которую вы можете оказать.Я чувствую, что это действительно глупая проблема, которую я просто не вижу.

1 Ответ

0 голосов
/ 07 февраля 2019

Строка, которая пишет в ваш файл, находится там:

            for half in half_urls_:
                 urls_.append('https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/' + half)

                with open('sub_urls.txt', 'a') as doc:
                    doc.write(str(urls_))

Переместите его обратно на уровень отступа.Он добавляет ваш полный список дистрибьюторов для каждого дистрибьютора в файл.

Попробуйте сделать так:

            for half in half_urls_:
                 urls_.append('https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/' + half)

            with open('sub_urls.txt', 'a') as doc:
                doc.write(str(urls_))
...