Паук Python закрыт без соскабливания URL - PullRequest
0 голосов
/ 29 января 2019

Я пишу паука с URL-адресами, составленными из файла CSV.При его выполнении никакие элементы не будут очищены.вот мой код паука:

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
def parse(self, response):        
    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        
            yield scrapy.Request(adurl, self.parse_item)

def parse_item(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-01-29 17:34:14 [scrapy.core.engine] INFO: Spider opened
> 2019-01-29 17:34:14 [scrapy.extensions.logstats] INFO: Crawled 0 pages
> (at 0 pages/min), scraped 0 items (at 0 items/min) 2019-01-29 17:34:14
> [tayarabureau] INFO: Spider opened: tayarabureau 2019-01-29 17:34:14
> [tayarabureau] INFO: Spider opened: tayarabureau 2019-01-29 17:34:14
> [scrapy.extensions.telnet] DEBUG: Telnet console listening on
> 127.0.0.1:6023 2019-01-29 17:34:14 [scrapy.core.engine] INFO: Closing spider (finished) 
> 2019-01-29 17:34:14 [scrapy.statscollectors] INFO:
> Dumping Scrapy stats: {'finish_reason': 'finished',  'finish_time':
> datetime.datetime(2019, 1, 29, 16, 34, 14, 403625), 
> 'log_count/DEBUG': 1,  'log_count/INFO': 9,  'start_time':
> datetime.datetime(2019, 1, 29, 16, 34, 14, 359624)} 2019-01-29
> 17:34:14 [scrapy.core.engine] INFO: Spider closed (finished)

1 Ответ

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

На самом деле вы предоставляете пустой 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

...