Scrapy не ломает элементы из моих URL-адресов: Сканирование (200)/Referer: None

124
17

Я пытаюсь отменить несколько страниц с веб-сайта. Для этого у меня разные стартовые URL-адреса и метод сканирования следующих страниц. Проблема в том, что паук не сбрасывает предметы и, похоже, не сканирует указанные страницы. У меня нет результата. У вас есть идея решить эту проблему?

Вот код

    class ListeCourse_level1(scrapy.Spider):
name = nom_robot
allowed_domains = domaine

start_urls = url_lister()
print(start_urls)
print('-----------------------------')

def parse(self, response):

selector = Selector(response)

for unElement in response.xpath('//*[@id="td-outer-wrap"]/div[3]/div/div/div[1]/div/div[2]/div[3]/table/tbody/tr'):
loader = ItemLoader(JustrunlahItem(), selector=unElement)

loader.add_xpath('eve_nom_evenement', './/td[2]/div/div[1]/div/a/text()')
loader.add_xpath('eve_date_deb', './/td[1]/div/text()')
loader.default_input_processor = MapCompose(string)
loader.default_output_processor = Join()

yield loader.load_item()

Экстракт окна оболочки

--------------------------------------------------
SCRAPING DES ELEMENTS EVENTS
--------------------------------------------------
2018-02-26 14:13:21 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://www.justrunlah.com/running-events-calendar-malaysia/page/9/> (referer: None)
--------------------------------------------------
SCRAPING DES ELEMENTS EVENTS
--------------------------------------------------
--------------------------------------------------
SCRAPING DES ELEMENTS EVENTS
--------------------------------------------------
2018-02-26 14:13:21 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://www.justrunlah.com/running-events-calendar-malaysia/page/7/> (referer: None)
--------------------------------------------------
SCRAPING DES ELEMENTS EVENTS
--------------------------------------------------
--------------------------------------------------
SCRAPING DES ELEMENTS EVENTS
--------------------------------------------------
2018-02-26 14:13:21 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://www.justrunlah.com/running-events-calendar-malaysia/page/2/> (referer: None)
--------------------------------------------------
SCRAPING DES ELEMENTS EVENTS
--------------------------------------------------
2018-02-26 14:13:22 [scrapy.core.engine] INFO: Closing spider (finished)
2018-02-26 14:13:22 [scrapy.statscollectors] INFO: Dumping Scrapy stats:
{'downloader/request_bytes': 6899,
'downloader/request_count': 21,
'downloader/request_method_count/GET': 21,
'downloader/response_bytes': 380251,
'downloader/response_count': 21,
'downloader/response_status_count/200': 12,
'downloader/response_status_count/301': 9,
'finish_reason': 'finished',
'finish_time': datetime.datetime(2018, 2, 26, 13, 13, 22, 63002),
'log_count/DEBUG': 22,
'log_count/INFO': 7,
'response_received_count': 12,
'scheduler/dequeued': 20,
'scheduler/dequeued/memory': 20,
'scheduler/enqueued': 20,
'scheduler/enqueued/memory': 20,
'start_time': datetime.datetime(2018, 2, 26, 13, 13, 17, 308549)}
2018-02-26 14:13:22 [scrapy.core.engine] INFO: Spider closed (finished)

(C:\Users\guichet-v\AppData\Local\Continuum\anaconda3) C:\Users\guichet-v\Documents\CHALLENGE\02_TRAVAIL\ETAPE_1_WebToSGBD\SCRIPT\justrunlah>

спросил(а) 2021-01-27T23:57:05+03:00 2 месяца, 2 недели назад
1
Решение
75

Копирование элемента xpath из инструментов разработчика вашего браузера даст вам то, что соответствует только одному элементу.
Даже тогда браузеру иногда необходимо изменить html, чтобы он мог его отображать, и поскольку ваш xpath является суперспецифичным, есть вероятность, что вы не получите даже этого 1 совпадения.

Как это исправить?

Взгляните на html, найдите соответствующие элементы, классы и идентификаторы и напишите xpath самостоятельно.
Например, что-то простое, как //tr соответствует всем элементам, которые вы пытаетесь сопоставить с //*[@id="td-outer-wrap"]/div[3]/div/div/div[1]/div/div[2]/div[3]/table/tbody/tr.

ответил(а) 2021-01-27T23:57:05+03:00 2 месяца, 2 недели назад
44

Как сказал @stranac, проблема исходит из Xpath. В настоящее время, когда я скопировал Xpath моего элемента в консоли Google, появился тег tbody. Но этот тег не содержится в исходном коде. Как пояснил @gangabass здесь, это "общая проблема: иногда нет тега tbody в исходном HTML для таблиц (современные браузеры автоматически добавляют его в DOM)". Я удалил его, извлечение работает, но оно не организовано, как я хочу (одна строка для одного события). У меня есть все данные извлечения в одной ячейке.

ответил(а) 2021-01-27T23:57:05+03:00 2 месяца, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема