Мне нужна помощь в понимании sou.find () для создания веб-страниц и о том, как именно это работает, чтобы найти нужную информацию - PullRequest
0 голосов
/ 27 сентября 2019

Я новичок в веб-скриптинге, HTML, Javascript и CSS, поэтому я не уверен, какую именно информацию мне не хватает, чтобы решить мою проблему.Я использую красивый суп, чтобы очистить некоторые веб-страницы, где у меня есть открытая веб-страница, чтобы я мог точно видеть, куда и какие данные извлекать, используя функцию красивого супа, soup.find ().Я получил несколько вызовов sou.find () на работу, но приведенные ниже не вернули NONE, и я хотел бы уточнить, почему это так.

Есть ли что-то, чего я не понимаю в HTML или использовании Beautifulsoup?

Я посмотрел документацию по красивым супам, в которой отсылал меня к

soup.find(name,{"attributeName":"attribute", ... "attributeName4":"attribute4"}, recursive=True, text=None)

Насколько я понимаю,

"name"="tag" (in purple), and "attributeName"="attribute" (in orange).

Я уже протестировал приведенный ниже код, и он возвращает NONE.

Я добавил следующий фрагмент кода, используя селен:

element = driver.find_element_by_css_selector('div.cp_ratings.rated')

Ниже приведен фрагмент кода, который я пытаюсь очистить, и соответствующие неудачные строки кода, которые вернули NONE:

<div class="cp_ratings  rated" data-rating_value="8" data-js="ratings" data-read_only="true" data-bib_id="95103005" data-inline_messaging="true" testid="widget_averagerating">
  <div class="rating_wrapper rating_large rating_average" data-js="rating-wrapper">
    <div class=" rating_icons" data-js="rating-icons" style="width: 80%;">
    </div>
  </div>
</div>

Чтобы получить значение = 8 из "data-rating_value", я попыталсяследующие фрагменты кода:

(1) item = soup.find("span",{"class":"cp_ratings rated"})

(2) item = soup.find("div",{"class":"cp_ratings rated"})

(и как указано в этом вопросе о переполнении стека): Понятьфункция Find () в Beautiful Soup

(3) item = soup.find("span",{"class":"cp_ratings.rated","data-rating_value":True,"data-js":"ratings","data-read_only":"false","data-bib_id":"1143905005","data-inline_messaging":"false","testid":"widget_rating"})

(4) item = soup.find("span",{"class":"cp_ratings rated","data-rating_value":True,"data-js":"ratings","data-read_only":"false","data-bib_id":"1143905005","data-inline_messaging":"false","testid":"widget_rating"})

Я ожидал получить data-rating_value иvalue=0 в коде выше, но вместо этого я получил NONE.Насколько я понимаю, вы должны поместить все атрибуты в тег, чтобы найти результат, но в этом случае этого не происходит.

Ссылка на веб-страницу: https://epl.bibliocommons.com/item/show/1142125005?active_tab=bib_info#

Ответы [ 2 ]

0 голосов
/ 28 сентября 2019

Оценка основана на процентном соотношении ширины стиля к максимальному рейтингу звезды 5

import requests, re
from bs4 import BeautifulSoup as bs

p = re.compile(r'\d+')
r = requests.get('https://epl.bibliocommons.com/item/show/1142125005?active_tab=bib_info#')
soup = bs(r.content, 'lxml')
title = soup.select_one('.item_bib_title').text.strip()
rating = int(p.findall(soup.select_one('.rating_icons')['style'])[0])/100 * 5 #5 is max start full width i.e. 100%
print(rating)
0 голосов
/ 27 сентября 2019

Для первой проблемы вам нужно поделиться своим HTML.Для второй проблемы Попробуйте soup.find('div', {'class' : 'cp_ratings rated'}) вместо soup.find("span",{"class":"cp_ratings rated"})

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