Python Webscrapper для Boardgamegeek - PullRequest
       4

Python Webscrapper для Boardgamegeek

2 голосов
/ 09 февраля 2020

Цель Scrapper - проанализировать, какие настольные игры набрали наибольшее количество голосов и распечатать их в отсортированном списке. В основном словарь "имя: палец вверх". Вот список игр, которые я хочу отсортировать: https://boardgamegeek.com/geeklist/268396/20-most-anticipated-games-2020-11th-year-nominatio

Я использую Framework Scrapy в Python. Я обнаружил, что следующие команды хороши для извлечения заголовка и больших пальцев:

response.css('.fl > a:nth-child(2)::text').getall()
response.css('.recs a::text').getall()

Проблема возникает, когда игра набрала 0 больших пальцев, тогда Scrapy просто пропускает большой палец вверх. Это означает, что список заголовков - это больше, чем просто палец вверх. Например, я мог бы получить список из 25 названий и просто список из 20 превью с помощью приведенных выше команд. Есть ли способ преобразовать пустые строки в значение по умолчанию 0, чтобы список имен и список больших пальцев был равен? Как:

response.css('.recs a::text').getall(default="0")

Когда нет больших пальцев, это выглядит так:

<a aria-label="Recommendations and tip info" class="js-score" href="javascript://" onclick="RecSpy( 'listitem', '7520669', 'tippers' ); return false;"></a>

1 Ответ

0 голосов
/ 09 февраля 2020

Вместо того, чтобы собирать каждую настольную игру и их лайки отдельно от основного DOM, вы можете вместо этого выбрать каждый селектор, который содержит как лайки, так и название настольной игры, например,

games = response.css('.mb5') # fetch every selector with class "mb5"
for game in games:
  name = game.css('.fl > a:nth-child(2)::text').get()
  likes = game.css('.recs a::text').get() or 0
  ...

Псевдокод , но я надеюсь, что вы поняли.

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