Javascript 我需要帮助理解用于webscraping的soup.find(),以及如何准确地找到正确的信息

Javascript 我需要帮助理解用于webscraping的soup.find(),以及如何准确地找到正确的信息,javascript,python,html,web-scraping,beautifulsoup,Javascript,Python,Html,Web Scraping,Beautifulsoup,我不熟悉网页垃圾、HTML、Javascript和CSS,所以我不确定我到底缺少什么样的信息来解决我的问题。我正在使用beautiful soup刮取一些网页,在那里我打开了网页,因此我可以使用beautiful soup的函数soup.find()准确地查看要拉取的数据的位置和类型。我得到了一些soup.find()调用来工作,但是下面的调用没有返回任何调用,我想澄清一下为什么会这样做 关于HTML或beautifulsoup的使用,有什么我不了解的吗 我已经看了漂亮的汤文档,其中提到了 so

我不熟悉网页垃圾、HTML、Javascript和CSS,所以我不确定我到底缺少什么样的信息来解决我的问题。我正在使用beautiful soup刮取一些网页,在那里我打开了网页,因此我可以使用beautiful soup的函数soup.find()准确地查看要拉取的数据的位置和类型。我得到了一些soup.find()调用来工作,但是下面的调用没有返回任何调用,我想澄清一下为什么会这样做

关于HTML或beautifulsoup的使用,有什么我不了解的吗

我已经看了漂亮的汤文档,其中提到了

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

"name"="tag" (in purple), and "attributeName"="attribute" (in orange).
我已经测试了下面的代码,它没有返回任何结果

我使用selenium添加了以下代码:

element = driver.find_element_by_css_selector('div.cp_ratings.rated')
下面是我试图提取的代码片段以及相应的未成功代码行,这些代码行没有返回任何结果:

<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>

为了从“data-rating_value”中获得=8的值,我尝试了以下代码:

(1)
item=soup.find(“span”,“class”:“cp\U评级”})

(2)
item=soup.find(“div”,“class”:“cp\U评级”})

(如本堆栈溢出问题所述):

(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_messageing”:“false”,“testid”:“widget_rating”})

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

我希望在上面的代码中得到
数据评级值
值=0
,但我没有得到。根据我的理解,您必须将所有属性放在标记中才能找到结果,但这种情况不会发生


链接到网页:

对于第一个问题,您需要共享您的html。 第二个问题
尝试
soup.find('div',{'class':'cp_ratings'})
而不是
soup.find('span',{'class:'cp_ratings'})

评级来自应用于最大星级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)

您需要提取data-rating_-value属性才能获得8,但是您可以共享url吗?如果元素是动态的,那么它就不会出现在请求中。尝试关闭页面上的javascript并刷新页面-元素仍然可见吗?我尝试了,但没有成功。我对上面的问题做了更多的编辑,以展示我从那时起所做的工作-我解决了第一个问题,我仍然停留在第二个问题上,但从那时起我实际上使用了selenium(这就是我解决第一个问题的方式)。