Beautifulsoup python3 Howlongtobeat.com извлекает имя (и другие элементы) - PullRequest
0 голосов
/ 09 июня 2018

Пытаясь выяснить, как извлечь название игры с помощью Beautifulsoup

Я думаю, что у меня проблема с HTML-аспектом этого

вот что у меня так далеко:

from requests import get

url = 'https://howlongtobeat.com/game.php?id=38050'

response = get(url)

from bs4 import BeautifulSoup

html_soup = BeautifulSoup(response.text, 'html.parser')

game_length = html_soup.find_all('div', class_='game_times')

length = (game_length[-1].find_all({'li': '    short time_100 shadow_box'})[-1].contents[3].get_text())

print(length)

game_name = html_soup.find_all('div', class_='profile_header_game')

game = (game_name[].find({"profile_header shadow_text"})[].contents[].get_text())

print(game)

Я получаю длину, но не название игры, почему?

для печати (длины):

31 Hours 

, но для печати (игры):

game_name = html_soup.find_all ('div', class _ = 'profile_header_game')

game = (game_name []. Find ({"profile_header shadow_text)"}) []. contents []. get_text ()) Файл" ", строка 1 game = (game_name []. find ({" profile_header shadow_text "}) []. contents []. get_text ()) ^ SyntaxError:неверный синтаксис

print (game) Traceback (последний вызов был последним): файл "", строка 1, в NameError: имя 'game' не определено

что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 09 июня 2018

укороченная версия

game_length = html_soup.select('div.game_times li div')[-1].text
game_name = html_soup.select('div.profile_header')[0].text
developer = html_soup.find_all('strong', string='\nDeveloper:\n')[0].next_sibling
0 голосов
/ 09 июня 2018

Похоже, в вашем коде есть несколько синтаксических проблем.Вот исправленная версия:

from bs4 import BeautifulSoup
import requests

url = 'https://howlongtobeat.com/game.php?id=38050'
response = requests.get(url)

html_soup = BeautifulSoup(response.text, 'html.parser')
game_times_tag = html_soup.find('div', class_='game_times')

game_time_list = []
for li_tag in game_times_tag.find_all('li'):
    title = li_tag.find('h5').text.strip()
    play_time = li_tag.find('div').text.strip()

    game_time_list.append((title, play_time))

for game_time in game_time_list:
    print(game_time)

profile_header_tag = html_soup.find("div", {"class": "profile_header shadow_text"})
game_name = profile_header_tag.text.strip()
print(game_name)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...