Очистка списка с помощью скрапа и структурирование - PullRequest
0 голосов
/ 07 декабря 2018

Я пытаюсь вычистить каждый заголовок и счет с этой страницы https://myanimelist.net/animelist/MoonlessMidnite?status=7 и вернуть данные в этой форме:

{"user" : moonlessmidnite, "anime" : A, "score" : x 
"user" : moonlessmidnite, "anime" : B, "score" : x 
"user" : moonlessmidnite, "anime" : C, "score" : x }

... ect

Мне удалосьчтобы получить таблицу

table = response.xpath('.//tr[@class = "list-table-data"]')

score = table.xpath('.//td[@class =  "data score"]//a/text()').extract()
title = table.xpath('.//td//a[@class = "link sort"]').extract()

, но когда я пытаюсь очистить титул или счет, у меня появляется какой-то странный результат, например:

['\n            ', '\n          ', '${ item.anime_title }']

1 Ответ

0 голосов
/ 07 декабря 2018

Посмотрите необработанный HTML-код веб-сайта:

Raw HTML

Вы видите, что он действительно содержит ${ item.anime_title }.

Этоуказывает, что контент генерируется с помощью Javascript.Простого решения для этого не существует, вам придется посмотреть на выполняемые запросы XHR и посмотреть, сможете ли вы получить что-то значимое.

Если вы внимательно посмотрите на HTML, вы увидите, что данныесодержится в большой строке JSON в таблице data-item attrbute.

Попробуйте это в оболочке scrapy:

fetch('https://myanimelist.net/animelist/MoonlessMidnite?status=7')
import json
json.loads(response.xpath('//table[@class="list-table"]/@data-items').extract_first()

Это выводит что-то вроде этого:

{'status': 2,
  'score': 0,
  'tags': '',
  'is_rewatching': 0,
  'num_watched_episodes': 1,
  'anime_title': 'Hidan no Aria Special',
  'anime_num_episodes': 1,
  'anime_airing_status': 2,
  'anime_id': 10604,
  'anime_studios': None,
  'anime_licensors': None,
  'anime_season': None,
  'has_episode_video': False,
  'has_promotion_video': True,
  'has_video': True,
  'video_url': '/anime/10604/Hidan_no_Aria_Special/video',
  'anime_url': '/anime/10604/Hidan_no_Aria_Special',
  'anime_image_path': 'https://cdn.myanimelist.net/r/96x136/images/anime/2/29138.jpg?s=90cb8381c58c92d39862ac700c43f7b5',
  'is_added_to_list': False,
  'anime_media_type_string': 'Special',
  'anime_mpaa_rating_string': 'PG-13',
  'start_date_string': None,
  'finish_date_string': None,
  'anime_start_date_string': '12-21-11',
  'anime_end_date_string': '12-21-11',
  'days_string': None,
  'storage_string': '',
  'priority_string': 'Low'},
 {'status': 6,
  'score': 0,
  'tags': '',
  'is_rewatching': 0,
  'num_watched_episodes': 0,
  'anime_title': '.hack//Roots',
  'anime_num_episodes': 26,
  'anime_airing_status': 2,
  'anime_id': 873,
  'anime_studios': None,
  'anime_licensors': None,
  'anime_season': None,
  'has_episode_video': False,
  'has_promotion_video': True,
  'has_video': True,
  'video_url': '/anime/873/hack__Roots/video',
  'anime_url': '/anime/873/hack__Roots',
  'anime_image_path': 'https://cdn.myanimelist.net/r/96x136/images/anime/3/13050.jpg?s=db9ff70bf19742172f1d0140c95c4a65',
  'is_added_to_list': False,
  'anime_media_type_string': 'TV',
  'anime_mpaa_rating_string': 'PG-13',
  'start_date_string': None,
  'finish_date_string': None,
  'anime_start_date_string': '04-06-06',
  'anime_end_date_string': '09-28-06',
  'days_string': None,
  'storage_string': '',
  'priority_string': 'Low'}

Тогда вам просто нужно использовать этот диктовку, чтобы получить необходимую информацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...