【问题标题】:How to get the value in the tag div with python如何使用python获取标签div中的值
【发布时间】:2019-12-06 14:53:33
【问题描述】:

我想要 div 标签中的分数值 这是我写的函数

def get_score(text):
    soup = BeautifulSoup(text,features="lxml")
    scores=soup.text[Score]
    score=scores.find_all(attrs={"Score":"value"})
    return(score) 

a="[<a aria-label=""Signaler le document BDE-BSS MOB ( Application ) (nouvelle fenêtre)"" class=""result-options report-result" "href=""/evaluation?data=eyJmcm9tIjoicmVmZXJlbmNlZF9zaXRlcyIsImRpZCI6MjE1MjIsInB1YmxpY1VybCI6Imh0dHA6XC9cL29yYW5nZWNhcnRvLnNzby5pbmZyYS5mdGdyb3VwXC9iaW5jYXJ0b1wvUGFnZXNcL0NvbXBvbmVudHNcL0NvbXBvbmVudC5hc3B4P2lkPTY2MSZ0YWI9RGVzY3JpcHRpb24iLCJwb3NpdGlvbiI6MSwic2NvcmUiOjE1Mzc4MCwiZGlmZlNjb3JlIjowLCJib29zdGVkIjowLCJ0aGVtZXMiOiJJbmZvcm1hdGlxdWUsIGdyb3VwZSIsInN0YXR1cyI6Im9rIiwiY2xvdWRWaWV3VG90YWxQcm9jZXNzaW5nVGltZSI6MTY4NTMyLCJjbG91ZFZpZXdJc1N1Z2dlc3Rpb25Qcm9wb3NlZCI6MCwicXVlcnlEYXRhIjp7InJkYXRhIjoiYmRlIiwiaWhtIjoiZnIiLCJjbG91ZHZpZXdSZGF0YSI6ImJkZSIsInF1ZXJ5SWQiOiI0NzQ1ZDBiMjE5NjY3ZTJkYzVkN2JkYjFmY2JlMjNhNSJ9LCJxdWVyeU5NYXRjaCI6MzgyMCwicXVlcnlOSGl0cyI6MzAyNCwiaXNOb3RGb3VuZCI6MCwib3JPcGVyYXRvciI6MCwiYmFzaWNhdCI6bnVsbCwicmVmZXJlciI6bnVsbH0=&eval=eyJyZXF1ZXN0IjoiYmRlIiwib3JkZXIiOm51bGwsInJlc3BvbnNlVXJsIjoiaHR0cDpcL1wvb3JhbmdlY2FydG8uc3NvLmluZnJhLmZ0Z3JvdXBcL2JpbmNhcnRvXC9QYWdlc1wvQ29tcG9uZW50c1wvQ29tcG9uZW50LmFzcHg/aWQ9NjYxJnRhYj1EZXNjcmlwdGlvbiIsInJlc3BvbnNlUmFuayI6MSwicmVzcG9uc2VTY29yZSI6IjE1Mzc4MCIsInJlc3BvbnNlVGhlbWVzIjoiSW5mb3JtYXRpcXVlLCBncm91cGUiLCJyZXF1ZXN0UmVzdWx0c0NvdW50IjozMDI0fQ==&typeicon=1&url=https://enquete.orange.com/store/itw/answer/s/hmaw6nljru/k/Qd2BPas?idDeRequete=4745d0b219667e2dc5d7bdb1fcbe23a5&requete=bde&urlResultat=http%3A%2F%2Forangecarto.sso.infra.ftgroup%2Fbincarto%2FPages%2FComponents%2FComponent.aspx%3Fid%3D661%26tab%3DDescription&mail=rym.boukriba%40orange.com&rangURL=1" "target=""blank" "title=""Signaler le document BDE-BSS MOB ( Application ) (nouvelle fenêtre)""><span class=""icon-1013-Reseau""></span></a>], [<div class=""hit-debug-info""><div>Score : 153780.000000</div><div>Term score : 3495</div><div>Date Pallier : 4</div><div>Boost Site : 0</div><div>Boost Type : 10</div><div>Boost Actu : 1</div><div>Thèmes du hit : Informatique, groupe</div></div>]"

我只想作为输出:153780.000000

【问题讨论】:

  • 你试过find_one()吗?
  • 是的,我试过 find , find_all 并找到一个!
  • DIV 周围发布包含您想要的分数的HTML。您应该能够编写一个定位器来找到它,但如果没有相关的 HTML,我们就无法做到这一点。它看起来像一个 CSS 选择器,div.hit-debug-info > div 会为您提供 Score : 153780.000000 的内容,但其中的所有其他内容很难分辨。

标签: python beautifulsoup tags


【解决方案1】:

由于您的 div 标签上没有标签,我不能只“搜索”汤中的标签。 因此,鉴于您提供的来源,这就是我的做法。

page_source = """ a="[<a aria-label=""Signaler le document BDE-BSS MOB ( Application ) (nouvelle fenêtre)"" class=""result-options report-result" "href=""/evaluation?data=eyJmcm9tIjoicmVmZXJlbmNlZF9zaXRlcyIsImRpZCI6MjE1MjIsInB1YmxpY1VybCI6Imh0dHA6XC9cL29yYW5nZWNhcnRvLnNzby5pbmZyYS5mdGdyb3VwXC9iaW5jYXJ0b1wvUGFnZXNcL0NvbXBvbmVudHNcL0NvbXBvbmVudC5hc3B4P2lkPTY2MSZ0YWI9RGVzY3JpcHRpb24iLCJwb3NpdGlvbiI6MSwic2NvcmUiOjE1Mzc4MCwiZGlmZlNjb3JlIjowLCJib29zdGVkIjowLCJ0aGVtZXMiOiJJbmZvcm1hdGlxdWUsIGdyb3VwZSIsInN0YXR1cyI6Im9rIiwiY2xvdWRWaWV3VG90YWxQcm9jZXNzaW5nVGltZSI6MTY4NTMyLCJjbG91ZFZpZXdJc1N1Z2dlc3Rpb25Qcm9wb3NlZCI6MCwicXVlcnlEYXRhIjp7InJkYXRhIjoiYmRlIiwiaWhtIjoiZnIiLCJjbG91ZHZpZXdSZGF0YSI6ImJkZSIsInF1ZXJ5SWQiOiI0NzQ1ZDBiMjE5NjY3ZTJkYzVkN2JkYjFmY2JlMjNhNSJ9LCJxdWVyeU5NYXRjaCI6MzgyMCwicXVlcnlOSGl0cyI6MzAyNCwiaXNOb3RGb3VuZCI6MCwib3JPcGVyYXRvciI6MCwiYmFzaWNhdCI6bnVsbCwicmVmZXJlciI6bnVsbH0=&amp;eval=eyJyZXF1ZXN0IjoiYmRlIiwib3JkZXIiOm51bGwsInJlc3BvbnNlVXJsIjoiaHR0cDpcL1wvb3JhbmdlY2FydG8uc3NvLmluZnJhLmZ0Z3JvdXBcL2JpbmNhcnRvXC9QYWdlc1wvQ29tcG9uZW50c1wvQ29tcG9uZW50LmFzcHg/aWQ9NjYxJnRhYj1EZXNjcmlwdGlvbiIsInJlc3BvbnNlUmFuayI6MSwicmVzcG9uc2VTY29yZSI6IjE1Mzc4MCIsInJlc3BvbnNlVGhlbWVzIjoiSW5mb3JtYXRpcXVlLCBncm91cGUiLCJyZXF1ZXN0UmVzdWx0c0NvdW50IjozMDI0fQ==&amp;typeicon=1&amp;url=https://enquete.orange.com/store/itw/answer/s/hmaw6nljru/k/Qd2BPas?idDeRequete=4745d0b219667e2dc5d7bdb1fcbe23a5&amp;requete=bde&amp;urlResultat=http%3A%2F%2Forangecarto.sso.infra.ftgroup%2Fbincarto%2FPages%2FComponents%2FComponent.aspx%3Fid%3D661%26tab%3DDescription&amp;mail=rym.boukriba%40orange.com&amp;rangURL=1" "target=""blank" "title=""Signaler le document BDE-BSS MOB ( Application ) (nouvelle fenêtre)""><span class=""icon-1013-Reseau""></span></a>], [<div class=""hit-debug-info""><div>Score : 153780.000000</div><div>Term score : 3495</div><div>Date Pallier : 4</div><div>Boost Site : 0</div><div>Boost Type : 10</div><div>Boost Actu : 1</div><div>Thèmes du hit : Informatique, groupe</div></div>]" """

soup = BeautifulSoup(page_source, 'html.parser')
x = soup.find_all('div', '')
for i in x:
    if str(i.contents[0]).startswith("Score : "):
        print(str(i.contents[0]).split(" ")[2])

这个输出。

153780.000000

【讨论】:

  • 感谢它的工作,但如何做才能只获得没有分数的分数:因为我会将它运行到 200 html 文件,这不是一个列表或元组来写分数 [0]获取值的示例
  • 我更新了代码来进行字符串拆分。有很多方法可以拆分字符串。不确定我是否选择了最好的。
  • 如果您将链接发布到您正在抓取的页面,那么回答这个问题会更容易。
  • 它是私人网站,只能从内网访问
【解决方案2】:

使用正则表达式 re.

import re
def get_score(text):
    soup = BeautifulSoup(text,features="lxml")
    scoretag=soup.find('div', text=re.compile("Score :"))
    score=scoretag.text.split("Score :")[1].strip()
    return(score)

print(get_score("<a aria-label=""Signaler le document BDE-BSS MOB ( Application ) (nouvelle fenêtre)"" class=""result-options report-result" "href=""/evaluation?data=eyJmcm9tIjoicmVmZXJlbmNlZF9zaXRlcyIsImRpZCI6MjE1MjIsInB1YmxpY1VybCI6Imh0dHA6XC9cL29yYW5nZWNhcnRvLnNzby5pbmZyYS5mdGdyb3VwXC9iaW5jYXJ0b1wvUGFnZXNcL0NvbXBvbmVudHNcL0NvbXBvbmVudC5hc3B4P2lkPTY2MSZ0YWI9RGVzY3JpcHRpb24iLCJwb3NpdGlvbiI6MSwic2NvcmUiOjE1Mzc4MCwiZGlmZlNjb3JlIjowLCJib29zdGVkIjowLCJ0aGVtZXMiOiJJbmZvcm1hdGlxdWUsIGdyb3VwZSIsInN0YXR1cyI6Im9rIiwiY2xvdWRWaWV3VG90YWxQcm9jZXNzaW5nVGltZSI6MTY4NTMyLCJjbG91ZFZpZXdJc1N1Z2dlc3Rpb25Qcm9wb3NlZCI6MCwicXVlcnlEYXRhIjp7InJkYXRhIjoiYmRlIiwiaWhtIjoiZnIiLCJjbG91ZHZpZXdSZGF0YSI6ImJkZSIsInF1ZXJ5SWQiOiI0NzQ1ZDBiMjE5NjY3ZTJkYzVkN2JkYjFmY2JlMjNhNSJ9LCJxdWVyeU5NYXRjaCI6MzgyMCwicXVlcnlOSGl0cyI6MzAyNCwiaXNOb3RGb3VuZCI6MCwib3JPcGVyYXRvciI6MCwiYmFzaWNhdCI6bnVsbCwicmVmZXJlciI6bnVsbH0=&amp;eval=eyJyZXF1ZXN0IjoiYmRlIiwib3JkZXIiOm51bGwsInJlc3BvbnNlVXJsIjoiaHR0cDpcL1wvb3JhbmdlY2FydG8uc3NvLmluZnJhLmZ0Z3JvdXBcL2JpbmNhcnRvXC9QYWdlc1wvQ29tcG9uZW50c1wvQ29tcG9uZW50LmFzcHg/aWQ9NjYxJnRhYj1EZXNjcmlwdGlvbiIsInJlc3BvbnNlUmFuayI6MSwicmVzcG9uc2VTY29yZSI6IjE1Mzc4MCIsInJlc3BvbnNlVGhlbWVzIjoiSW5mb3JtYXRpcXVlLCBncm91cGUiLCJyZXF1ZXN0UmVzdWx0c0NvdW50IjozMDI0fQ==&amp;typeicon=1&amp;url=https://enquete.orange.com/store/itw/answer/s/hmaw6nljru/k/Qd2BPas?idDeRequete=4745d0b219667e2dc5d7bdb1fcbe23a5&amp;requete=bde&amp;urlResultat=http%3A%2F%2Forangecarto.sso.infra.ftgroup%2Fbincarto%2FPages%2FComponents%2FComponent.aspx%3Fid%3D661%26tab%3DDescription&amp;mail=rym.boukriba%40orange.com&amp;rangURL=1" "target=""blank" "title=""Signaler le document BDE-BSS MOB ( Application ) (nouvelle fenêtre)""><span class=""icon-1013-Reseau""></span></a>], [<div class=""hit-debug-info""><div>Score : 153780.000000</div><div>Term score : 3495</div><div>Date Pallier : 4</div><div>Boost Site : 0</div><div>Boost Type : 10</div><div>Boost Actu : 1</div><div>Thèmes du hit : Informatique, groupe</div></div>"))

输出:

153780.000000

编辑:

from bs4 import BeautifulSoup
import re
data='''<a aria-label=""Signaler le document BDE-BSS MOB ( Application ) (nouvelle fenêtre)"" class=""result-options report-result" "href=""/evaluation?data=eyJmcm9tIjoicmVmZXJlbmNlZF9zaXRlcyIsImRpZCI6MjE1MjIsInB1YmxpY1VybCI6Imh0dHA6XC9cL29yYW5nZWNhcnRvLnNzby5pbmZyYS5mdGdyb3VwXC9iaW5jYXJ0b1wvUGFnZXNcL0NvbXBvbmVudHNcL0NvbXBvbmVudC5hc3B4P2lkPTY2MSZ0YWI9RGVzY3JpcHRpb24iLCJwb3NpdGlvbiI6MSwic2NvcmUiOjE1Mzc4MCwiZGlmZlNjb3JlIjowLCJib29zdGVkIjowLCJ0aGVtZXMiOiJJbmZvcm1hdGlxdWUsIGdyb3VwZSIsInN0YXR1cyI6Im9rIiwiY2xvdWRWaWV3VG90YWxQcm9jZXNzaW5nVGltZSI6MTY4NTMyLCJjbG91ZFZpZXdJc1N1Z2dlc3Rpb25Qcm9wb3NlZCI6MCwicXVlcnlEYXRhIjp7InJkYXRhIjoiYmRlIiwiaWhtIjoiZnIiLCJjbG91ZHZpZXdSZGF0YSI6ImJkZSIsInF1ZXJ5SWQiOiI0NzQ1ZDBiMjE5NjY3ZTJkYzVkN2JkYjFmY2JlMjNhNSJ9LCJxdWVyeU5NYXRjaCI6MzgyMCwicXVlcnlOSGl0cyI6MzAyNCwiaXNOb3RGb3VuZCI6MCwib3JPcGVyYXRvciI6MCwiYmFzaWNhdCI6bnVsbCwicmVmZXJlciI6bnVsbH0=&amp;eval=eyJyZXF1ZXN0IjoiYmRlIiwib3JkZXIiOm51bGwsInJlc3BvbnNlVXJsIjoiaHR0cDpcL1wvb3JhbmdlY2FydG8uc3NvLmluZnJhLmZ0Z3JvdXBcL2JpbmNhcnRvXC9QYWdlc1wvQ29tcG9uZW50c1wvQ29tcG9uZW50LmFzcHg/aWQ9NjYxJnRhYj1EZXNjcmlwdGlvbiIsInJlc3BvbnNlUmFuayI6MSwicmVzcG9uc2VTY29yZSI6IjE1Mzc4MCIsInJlc3BvbnNlVGhlbWVzIjoiSW5mb3JtYXRpcXVlLCBncm91cGUiLCJyZXF1ZXN0UmVzdWx0c0NvdW50IjozMDI0fQ==&amp;typeicon=1&amp;url=https://enquete.orange.com/store/itw/answer/s/hmaw6nljru/k/Qd2BPas?idDeRequete=4745d0b219667e2dc5d7bdb1fcbe23a5&amp;requete=bde&amp;urlResultat=http%3A%2F%2Forangecarto.sso.infra.ftgroup%2Fbincarto%2FPages%2FComponents%2FComponent.aspx%3Fid%3D661%26tab%3DDescription&amp;mail=rym.boukriba%40orange.com&amp;rangURL=1" "target=""blank" "title=""Signaler le document BDE-BSS MOB ( Application ) (nouvelle fenêtre)""><span class=""icon-1013-Reseau""></span></a>], [<div class=""hit-debug-info""><div>Score : 153780.000000</div><div>Term score : 3495</div><div>Date Pallier : 4</div><div>Boost Site : 0</div><div>Boost Type : 10</div><div>Boost Actu : 1</div><div>Thèmes du hit : Informatique, groupe</div></div>'''
soup = BeautifulSoup(data, features="lxml")
scorestag=soup.find_all('div', text=re.compile("Score :"))
scores=[score.text.split("Score :")[1].strip() for score in scorestag]
print(scores)

【讨论】:

  • 出现类似 link 的错误,我将 str 添加到文本中,但无法正常工作
  • @RymBoukriba :如果您在上面的帖子中提到的 html 应该可以工作。请检查已编辑的部分。
  • 它现在可以工作了,抱歉我无法发布整个 html,因为它包含一些机密信息,而且正如我所说,该网站只能从框架的 Intranet 访问。非常感谢
猜你喜欢
  • 1970-01-01
  • 2021-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-09
  • 1970-01-01
  • 1970-01-01
  • 2023-01-18
相关资源
最近更新 更多