我想从website提取价格
但是,我在查找类类型时遇到了麻烦。
在此website
我们看到这门课程的价格为$ 5141。当我检查源代码时,价格类应为“现场项目”。
from bs4 import BeautifulSoup
import pandas as pd
import requests
url =
"https://www.learningconnection.philips.com/en/course/pinnacle%C2%B3-
advanced-planning-education"
html = requests.get(url)
soup = BeautifulSoup(html.text, 'html.parser')
price = soup.find(class_='field-items')
print(price)
但是,当我运行代码时,我得到的是课程的描述而不是价格。.不确定我做错了什么。任何帮助表示感谢,谢谢!
答案 0 :(得分:3)
使用bs4 4.7.1 +,您可以使用:contains来隔离适当的先前标记,然后使用相邻的同级和后代组合器来到达目标
import requests
from bs4 import BeautifulSoup as bs
r = requests.get('https://www.learningconnection.philips.com/en/course/pinnacle%C2%B3-advanced-planning-education')
soup = bs(r.content, 'lxml')
print(soup.select_one('.field-label:contains("Price:") + div .field-item').text)
此
.field-label:contains("Price:")
查找具有类field-label
的元素,.
是一个css类选择器,其中包含文本Price:
。然后+
是相邻的同级组合器,指定获取相邻的div
。 .field-item
(空格点field-item
)是后继组合器(空格),是相邻div
的子类为field-item
的子级的类选择器。 select_one
返回DOM中CSS选择器组合的第一个匹配项。
阅读:
答案 1 :(得分:2)
您的网页上实际上有几个“字段甚至字段”类,因此您必须在良好的类中选择一个。这是代码:
from bs4 import BeautifulSoup
import pandas as pd
import requests
url = "https://www.learningconnection.philips.com/en/course/pinnacle%C2%B3-advanced-planning-education"
html = requests.get(url)
soup = BeautifulSoup(html.text, 'html.parser')
section = soup.find(class_='field field-name-field-price field-type-number-decimal field-label-inline clearfix view-mode-full')
price = section.find(class_="field-item even").text
print(price)
结果:
5141.00
答案 2 :(得分:2)
要获取价格,您可以尝试使用 .select() ,它精确且错误少。
import requests
from bs4 import BeautifulSoup
url = "https://www.learningconnection.philips.com/en/course/pinnacle%C2%B3-advanced-planning-education"
html = requests.get(url)
soup = BeautifulSoup(html.text, 'html.parser')
price = soup.select_one("[class*='field-price'] .even").text
print(price)
输出:
5141.00
答案 3 :(得分:1)
实际上,我使用Firefox inspector看到的类是:field-item,甚至是文本所在的地方:
<div class="field-items"><div class="field-item even">5141.00</div></div>
但是您需要更改一些代码:
price = soup.find_all("div",{"class":'field-item even'})[2]
有多个标记为“场项偶数”的类,价格不是第一个。