Как scrapy на python3 может получить текстовые данные, работающие на JavaScript - PullRequest
0 голосов
/ 22 февраля 2019

https://www.reddit.com/r/gameofthrones/

enter image description here

На этой странице я пытаюсь получить информацию о времени из некоторого времени, например, «14 дней назад».

В браузере, когда я перемещаю курсор мыши к этому тексту, он показывает информацию на основе даты и времени.Но если я просматриваю источник веб-страницы, я не могу его найти.Поэтому я думаю, что это работает на основе Javascript.

Я не веб-разработчик, и я не уверен, как я могу отследить проблему.

Мой вопрос: как я могу отследитьданные работают на основе javascript с использованием Chrome Dev-Tools и Scrapy Shell?

Ответы [ 4 ]

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

Вам необходимо использовать поддомен Reddit только для чтения (без участия):

https://np.reddit.com/r/gameofthrones/

Обратите внимание, что это np, а не www.В этом представлении вы получаете полную дату и время в HTML в теге <time> (в любом браузере) без запуска Javascript: time tag

Пример:

scrapy shell 'https://np.reddit.com/r/gameofthrones/'

>>> response.css('time::attr(datetime)').get()
'2010-03-02T22:52:12+00:00'
0 голосов
/ 22 февраля 2019

Reddit имеет официальный API .В таком случае я бы всерьез подумал о том, чтобы использовать его вместо соскоба HTML.

С другой стороны, если вы действительно хотите сделать соскоб HTML, я бы предложил вам использовать что-то вроде Scrapy Splash , чтобы активировать этот Javascript.Попытка найти необработанные данные, спрятанные в объектах Javascript, вероятно, не стоит усилий.Особенно, если Javascript выполняет дополнительную обработку, которую вам нужно будет реплицировать, потому что он все равно не будет работать на обычном Scrapy.

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

enter image description here

этот результат изображения, снятый в проводнике.

0 голосов
/ 22 февраля 2019
$ scrapy shell https://www.reddit.com/r/gameofthrones/ 

...

>>> response.css('[data-click-id="timestamp"]::text').get()
'15 days ago'
...