Красивый Суп, Получающий Текст От "data-linkid" - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь получить текст формы атрибута на веб-странице и не могу понять это.

<span class="one-click-content css-1p89gle e1q3nk1v4" data-term="funny" data-linkid="nn1ov4">laughing out loud; laugh out loud: used as a response to something funny or as a follow-up to something said only as a joke.</span>
from bs4 import BeautifulSoup
import requests

def get_definition(word):
  string = word
  page = requests.get('https://www.dictionary.com/browse/' + string)
  src = page.content
  soup = BeautifulSoup(src, 'lxml')

  definition_string = ""
  definition_string = soup.find({"data-linkid": "nn1ov4"})

  return definition_string

print(get_definition("lol"))

Я пытаюсь заставить "смеяться вслух; смеяться вслух: использовалв ответ на что-то смешное или в качестве продолжения чего-то, сказанного только как шутка ». но вместо этого я получаю "Нет"

Ответы [ 3 ]

1 голос
/ 07 ноября 2019

У меня есть проблемы с использованием запросов на этом компьютере (рабочий ноутбук), но по сути он все тот же.

Если вам нужно только самое первое определение, тогда вы можете найти первое <div> с value=1 и получить этот текст.

from bs4 import BeautifulSoup
from urllib.request import urlopen

def get_definition(word):
  string = word
  page = urlopen('https://www.dictionary.com/browse/' + string)
  soup = BeautifulSoup(page, 'lxml')

  definition_string = ""
  definition_string = soup.find('div', attrs={"value": "1"})
  string_text = definition_string.get_text()

  return string_text

print(get_definition("lol"))

Было возвращено следующее:

laughing out loud; laugh out loud: used as a response to something funny or as a follow-up to something said only as a joke.

РЕДАКТИРОВАТЬ: Использовать исходный код OP столько, сколько я мог, вместо того, чтобы переписать его.

0 голосов
/ 07 ноября 2019

Определение уже доступно в метаданных

from bs4 import BeautifulSoup
import requests

def get_definition(word):
    page = requests.get('https://www.dictionary.com/browse/' + word)
    src = page.content
    soup = BeautifulSoup(src, 'lxml')
    mydivs = soup.findAll("meta", {"name": "description"})
    definition_string = mydivs[0]['content']
    return definition_string

print(get_definition("lol"))

Lol definition, laughing out loud; laugh out loud: used as a response to something funny or as a follow-up to something said only as a joke. See more.

0 голосов
/ 07 ноября 2019

Добавьте имя тега:

измените

definition_string = soup.find({"data-linkid": "nn1ov4"})

на

definition_string = soup.find('a', {"data-linkid": "nn1ov4"})

, затем проанализируйте и проанализируйте определение_строки

Примечание: это работает для«кошка», как вы и просили изначально. Если вы ищете 'lol', он вообще не найдет идентификатор 'nn1ov4'.

Вы можете попробовать:

definition_string = soup.find('span', {"data-linkid": "nn1ov4"})

, но он не будет работать, поскольку в HTML такого параметра нет

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