На самом деле вы предоставляете пустой URL при разборе, который вы должны предоставить раньше.scrapy.spider
содержит параметр start_urls
, который по умолчанию пуст.Что вам нужно сделать, это добавить URL перед синтаксическим анализом.
проверить этот код.
import scrapy
import csv
import requests
from parsel import Selector
from scrapy.selector import Selector
from scrapy.http import HtmlResponse
class Tayara(scrapy.Spider):
name = "tayarabureau"
compteur = 1
start_urls = []
with open('TayaraBureaux.csv', encoding='utf-8') as csv_file:
csv_reader = csv.reader(csv_file, delimiter=';')
for row in csv_reader:
title = row[2].replace(' ', '-')
adurl = 'https://www.tayara.tn/listings/bureaux-et-plateaux-140/'+row[1]+'/'+title
start_urls.append(adurl)
def parse(self, response):
#item={}
source = 'Tayara'
reference = response.url.split('//')[1].split('/')[3]
titre = response.xpath('//h1[@data-name="adview_title"]/text()').extract()
gouvernorat = response.xpath('//p[@data-name="adview_location"]/text()').extract()[0].split(', ')[0]
delegation = response.xpath('//p[@data-name="adview_location"]/text()').extract()[0].split(', ')[1]
yield({'Source':source, 'Reference':reference, 'Titre':titre,
'Gouvernorat':gouvernorat, 'Delegation':delegation})
Вот вывод, который я получаю:
2019-02-07 11:28:22 [scrapy.core.engine] INFO: Spider opened
2019-02-07 11:28:23 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
2019-02-07 11:28:24 [scrapy.core.engine] DEBUG: Crawled (200)
<GET https://www.tayara.tn/listings/bureaux-et-plateaux-140/b54871b9-cad3 4113-97ce-a2eac095146f/chambre-d'enfant> (referer: None)
{'Source': 'Tayara', 'Reference': 'b54871b9-cad3-4113-97ce-a2eac095146f',
'Titre': ["chambre d'enfant"], 'Gouvernorat': 'Nabeul', 'Delegation': 'El Haouaria'}
2019-02-07 11:28:24 [scrapy.core.engine] INFO: Closing spider (finished)
2019-02-07 11:28:24 [scrapy.statscollectors] INFO: Dumping Scrapy stats:
{'downloader/request_bytes': 298,
'downloader/request_count': 1,
'downloader/request_method_count/GET': 1,
'downloader/response_bytes': 33258,
'downloader/response_count': 1,
'downloader/response_status_count/200': 1,
'finish_reason': 'finished',
'finish_time': datetime.datetime(2019, 2, 7, 2, 28, 24, 680904),
'log_count/DEBUG': 1,
'log_count/INFO': 7,
'response_received_count': 1,
'scheduler/dequeued': 1,
'scheduler/dequeued/memory': 1,
'scheduler/enqueued': 1,
'scheduler/enqueued/memory': 1,
'start_time': datetime.datetime(2019, 2, 7, 2, 28, 23, 33853)}
2019-02-07 11:28:24 [scrapy.core.engine] INFO: Spider closed (finished)
Кстати, если вы сканируете несколько сайтов и вам нужно создать настройку url
перед анализом, используйте scrapy-redis , где вы можете передать URL-адрес паукам через redis.
Если вам нужен какой-то дополнительный параметр наряду с URL, вы можете использовать scrapy-redis-json-support