无法找到价格类别-网络抓取

时间:2019-08-29 20:23:43

标签: python web-scraping beautifulsoup

我想从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)

但是,当我运行代码时,我得到的是课程的描述而不是价格。.不确定我做错了什么。任何帮助表示感谢,谢谢!

4 个答案:

答案 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. css selectors

答案 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]

有多个标记为“场项偶数”的类,价格不是第一个。