1
votes

Scrapy: le robot d'exploration ne parcourt pas

Je suis évidemment novice en python, en scrapy et en programmation en général. J'essaye de gratter ce site mais mon code ne semble pas fonctionner. Tous les exemples et didacticiels que j'ai trouvés concernent des sites Web simples et simples. Ou peut-être que je n'arrive tout simplement pas à comprendre. Il y a des centaines de résultats que j'ai besoin de gratter, et je ne veux vraiment pas le faire manuellement.

Donc, dans ce cas, j'essaie juste d'obtenir le href de l'objet div pour vérifier si cela fonctionne. Ce n'est pas le cas.

2019-01-30 23:57:13 [scrapy.middleware] INFO: Enabled extensions:
['scrapy.extensions.corestats.CoreStats',
 'scrapy.extensions.telnet.TelnetConsole',
 'scrapy.extensions.memusage.MemoryUsage',
 'scrapy.extensions.logstats.LogStats']
2019-01-30 23:57:13 [scrapy.middleware] INFO: Enabled downloader middlewares:
['scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware',
 'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware',
 'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware',
 'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware',
 'scrapy.downloadermiddlewares.retry.RetryMiddleware',
 'scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware',
 'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware',
 'scrapy.downloadermiddlewares.redirect.RedirectMiddleware',
 'scrapy.downloadermiddlewares.cookies.CookiesMiddleware',
 'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware',
 'scrapy.downloadermiddlewares.stats.DownloaderStats']
2019-01-30 23:57:13 [scrapy.middleware] INFO: Enabled spider middlewares:
['scrapy.spidermiddlewares.httperror.HttpErrorMiddleware',
 'scrapy.spidermiddlewares.offsite.OffsiteMiddleware',
 'scrapy.spidermiddlewares.referer.RefererMiddleware',
 'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware',
 'scrapy.spidermiddlewares.depth.DepthMiddleware']
2019-01-30 23:57:13 [scrapy.middleware] INFO: Enabled item pipelines:
[]
2019-01-30 23:57:13 [scrapy.core.engine] INFO: Spider opened
2019-01-30 23:57:13 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
2019-01-30 23:57:13 [scrapy.extensions.telnet] DEBUG: Telnet console listening on #NUMBER
2019-01-30 23:57:16 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/dealerslist/> (referer: None)
2019-01-30 23:57:16 [scrapy.core.engine] INFO: Closing spider (finished)
2019-01-30 23:57:16 [scrapy.statscollectors] INFO: Dumping Scrapy stats:
{'downloader/request_bytes': 276,
 'downloader/request_count': 1,
 'downloader/request_method_count/GET': 1,
 'downloader/response_bytes': 70592,
 'downloader/response_count': 1,
 'downloader/response_status_count/200': 1,
 'finish_reason': 'finished',
 'finish_time': datetime.datetime(2019, 1, 31, 2, 57, 16, 541215),
 'log_count/DEBUG': 2,
 'log_count/INFO': 7,
 'memusage/max': 57974784,
 'memusage/startup': 57974784,
 'response_received_count': 1,
 'scheduler/dequeued': 1,
 'scheduler/dequeued/memory': 1,
 'scheduler/enqueued': 1,
 'scheduler/enqueued/memory': 1,
 'start_time': datetime.datetime(2019, 1, 31, 2, 57, 13, 861593)}
2019-01-30 23:57:16 [scrapy.core.engine] INFO: Spider closed (finished)

Lorsqu'il est exécuté sur le terminal (en ignorant les robots), il renvoie:

import scrapy
import requests


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

    def start_requests(self):
        urls = [
            'https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/dealerslist/',
        ]
        for url in urls:
            yield scrapy.Request(url=url, callback=self.parse)

    def parse(self, response):
        list_doc = open('list_doc.txt', 'w')
        for item in response.css('div.row.m-dealer_list__row'):
            yield {
                'text': item.css('a::attr(href)').extract(),

            }

Merci pour toute aide que vous pouvez fournir.


0 commentaires

3 Réponses :


1
votes

Pour autant que je sache, il n'y a vraiment pas de tels éléments sur la page:

In [4]: response.css('div.m-dealer_citylist__card a::text').extract()
Out[4]: 
[u'25 DE MAYO - BS AS',
 u'25 DE MAYO - LA PAMP',
 u'25 DE MAYO',
 u'9 DE ABRIL',
...
 u'ZENON PEREYRA',
 u'Z\xc1RATE']

Mais si vous voulez essayer:

In [2]: fetch("https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/dealerslist/")
2019-01-31 09:31:47 [scrapy.core.engine] INFO: Spider opened
2019-01-31 09:31:48 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/dealerslist/> (referer: None, latency: 0.87 s)

In [3]: response.css('div.row.m-dealer_list__row')
Out[3]: []


0 commentaires

0
votes

J'ai visité le site Web que vous essayez de supprimer, mais votre css ne semble correspondre à aucun attribut HTML.

Il n'y a aucune balise avec le nom de classe m-dealer_list__row code >

Tout ce que je vois est m-dealer_citylist

Si je décris votre css:

Vous css décrit que vous extrayez un L'élément div avec 2 classes, l'un est row et le second est m-dealer_list__row

si vous voulez un div avec la classe row puis dans ce div toute balise avec m-dealer_list__row vous pouvez essayer ceci:

"div.row .m-dealer_list__row"


0 commentaires

0
votes

C'est pour vous). comprenez-le vous-même

import scrapy
import requests


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

    def start_requests(self):
        urls = [
            'https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/dealerslist/',
        ]
        for url in urls:
            yield scrapy.Request(url=url, callback=self.parse)

    def parse(self, response):
        list_doc = open('list_doc.txt', 'w')
        for item in response.css('.trackingTeaser'):
            href = item.css('a::attr(href)').extract_first()
            href = response.urljoin(href)
            list_doc.write(''.join(item.css('a::text').re(r'([^ \n\t]+)')) + ': ' + href + '\n')
        list_doc.close()

SORTIE:

entrez la description de l'image ici


0 commentaires