Python: BeautifulSoup добавляет слова из тега абзаца HTML в список - PullRequest
0 голосов
/ 26 февраля 2020

Я работаю над тем, чтобы научиться просматривать веб-страницы с помощью BeautifulSoup. Я пытаюсь создать игру Hangman для изучения Python и хотел создать однопользовательский режим, который использует 1000 самых распространенных слов на английском языке Engli sh. Первоначально я просто собирался скопировать и вставить каждое слово и пробежаться по списку (вот почему это так, пока l oop), но решил вместо этого попробовать BeautifulSoup.

import requests
from bs4 import BeautifulSoup

#words = []
#while True:
    #word = input("Enter the word: ")
    #words.append(word)
    #print(words)

page = requests.get("https://www.ef.edu/english-resources/english-vocabulary/top-1000-words/") 
resources/english-vocabulary/top-1000-words/")
soup = BeautifulSoup(page.content, "html.parser")
para = soup.find(class_="field-item even")

Я не совсем уверен где go отсюда. Я пытаюсь добавить все эти элементы с веб-сайта (расположенного во втором теге абзаца даже в классе feild-item) в список по отдельности, а затем сохранить этот список как пакет для использования в основной игре Hangman. Поскольку слова появляются во втором теге абзаца, я не уверен, как это сделать. Я смотрю несколько видео на YouTube, но все они имеют дело с текстом, у которого есть идентификатор или другой класс для вызова. Спасибо

Ответы [ 2 ]

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

Я написал быстрое решение для вас. Вам просто нужно найти правильный div, а затем выбрать правильный дочерний тег, который содержит слова. Из-за форматирования слова должны быть удалены из пробелов и помещены в список. Ответ Фураса описывает этот процесс более подробно.

import requests
from bs4 import BeautifulSoup

class Hangman:

    def run_game(self):
        word_bank = self.get_word_bank()
        while True:
            # Your game here

    def get_word_bank(self):
        page = requests.get("https://www.ef.edu/english-resources/english-vocabulary/top-1000-words/", verify=False)
        soup = BeautifulSoup(page.content, "html.parser")
        words_tag = soup.find('div', {'class': "field-item even"})
        word_bank = words.split(", ".join(words_tag.findChildren()[1].getText().split()))
        return word_bank

if __name__ == "__main__":
    hangman = Hangman()
    hangman.run_game()
0 голосов
/ 26 февраля 2020

Слова находятся во втором <p>, поэтому используйте para.find_all("p")[1], чтобы получить его.

И тогда вы можете получить .text из этого тега - и все слова в одной строке.

В строке есть вкладки, которые вы должны удалить - .replace("\t", ""), а затем вы можете .split("\n") создать список со словами.

import requests
from bs4 import BeautifulSoup

page = requests.get("https://www.ef.edu/english-resources/english-vocabulary/top-1000-words/") 

soup = BeautifulSoup(page.content, "html.parser")
para = soup.find(class_="field-item even")

second_p = para.find_all('p')[1]
text = second_p.text.replace('\t', '')
words = text.split('\n')
print(words)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...