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.
3 Réponses :
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]: []
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"
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: