(Соскреб в Интернете). Я нашел правильные теги, теперь, как мне извлечь текст? - PullRequest
0 голосов
/ 02 октября 2019

Я создаю свое первое веб-приложение, которое собирает названия игр, которые в настоящее время находятся на вкладке «Новые и тренды» на https://store.steampowered.com/.. Как только я пойму, как это сделать, я хочу повторить процесс сцены и экспорт в электронную таблицу в отдельных столбцах.

Я успешно нашел теги, содержащие текст, который я пытаюсь извлечь (заголовок), но я не уверен, как извлечь заголовкикак только я найду их контейнеры.

from urllib.request import urlopen
from bs4 import BeautifulSoup

my_url = 'https://store.steampowered.com/'
uClient = urlopen(my_url)
page_html = uClient.read()
uClient.close()

page_soup = BeautifulSoup(page_html, "html.parser")
containers = page_soup.findAll("div",{"class":"tab_item_name"}, limit=10)

for titles in containers:
    print(titles)

Я пытаюсь напечатать названия 10 игр, которые появляются на домашней странице Steam, в вертикальном списке, используя цикл for. На самом деле происходит распечатка тегов с заголовками:

<div class="tab_item_name">Destiny 2: Shadowkeep</div>
<div class="tab_item_name">Destiny 2</div>
<div class="tab_item_name">Destiny 2: Forsaken</div>
<div class="tab_item_name">Destiny 2: Shadowkeep Digital Deluxe Edition</div>
<div class="tab_item_name">NGU IDLE</div>
<div class="tab_item_name">Kaede the Eliminator / Eliminator 小枫</div>
<div class="tab_item_name">Spaceland</div>
<div class="tab_item_name">Cube World</div>
<div class="tab_item_name">Aokana - Four Rhythms Across the Blue</div>
<div class="tab_item_name">CODE VEIN</div>

Ответы [ 3 ]

0 голосов
/ 02 октября 2019

используйте titles.text или даже titles.get_text(), в зависимости от того, что вы предпочитаете, чтобы получить текст заголовка, как показано ниже:

from urllib.request import urlopen
from bs4 import BeautifulSoup

my_url = 'https://store.steampowered.com/'
uClient = urlopen(my_url)
page_html = uClient.read()
uClient.close()

page_soup = BeautifulSoup(page_html, "html.parser")
containers = page_soup.findAll("div",{"class":"tab_item_name"}, limit=11)

for titles in containers:
    print(titles.text)
0 голосов
/ 02 октября 2019

Еще один очень удобный способ - использовать lxml

import requests
import lxml.html

url = 'https://store.steampowered.com/'
# Make the request
response = requests.get(url=url, timeout=5)
# Parse tree
tree = lxml.html.fromstring(response.text)
# Select section corresponding to new games
sub_tree = tree.get_element_by_id('tab_newreleases_content')
# Extract data
games_list = [a.text_content() for a in sub_tree.find_class('tab_item_name')]

# Check
for game in games_list[:11]:
    print(game)
# Destiny 2: Shadowkeep
# Destiny 2
# Destiny 2: Forsaken
# Destiny 2: Shadowkeep Digital Deluxe Edition
# NGU IDLE
# Fernbus Simulator - MAN Lion's Intercity
# Euro Truck Simulator 2 - Pink Ribbon Charity Pack
# Spaceland
# Cube World
# CODE VEIN
# CODE VEIN
0 голосов
/ 02 октября 2019

Просто прочитайте документацию :

Если вам нужна только текстовая часть документа или тега, вы можете использовать метод get_text (). Он возвращает весь текст в документе или под тегом в виде одной строки Unicode.

Так что просто сделайте:

# Should be `title` IMO, because you are currently handling a single title
for titles in containers:
    print(titles.get_text())
...