从包含使用BeautifulSoup的id的span获取内容

时间:2016-03-19 18:03:28

标签: python beautifulsoup

我在使用Beautiful Soup 4从许多存储在span标签中的html文件中提取内容时遇到了麻烦

我已经使用了汤流,并找到(“dl”)将html缩小为带有“dl”标签的重复项目,然后查找所有跨度。

我的问题是如何从每个范围中提取正确的值并存储在变量中,以及处理

的排序
<span class="iconYes">Public</span>
<span class="iconNo">Private</span> 

所以我知道他们提供的服务

我的Python 3代码

WebText=BeautifulSoup(open(fileToProcess),"html.parser",parse_only=DentistStrainer)
datalist = WebText.find("dl")
        for listitems in datalist:
            spans = datalist.find_all('span')
            for span in spans:
                print(span)

示例输出

<span id="Content_Result_lblDentistName">Dr First Surname</span> 
<span class="lblAddress" id="Content_Result_lblAddress"><strong>Address</strong>: Dental Centre, Street, Town</span> 
<span class="lblAddress" id="Content_Result_lblPhone"><strong>Phone</strong>: 123-1234567</span> 
<span class="lblAddress" id="Content_Result_lblFax"><strong>Fax</strong>: 123-3456789</span> 
<span class="lblAddress" id="Content_Result_lblEmail">someone@somewhere.tld</span> 
<span class="lblAddress" id="Content_Result_lblWebsiteUrl">www.somewhere.tld</span> 
<span><strong>Services</strong>: </span> 
<span class="iconYes">Private</span> 
<span class="iconYes">Public</span>
<span class="iconNo">Credit Card</span>

我尝试使用

提取值时未成功
if span.contains("lblDentistName"):
   DentistName = span.text()
   print("Dentist ",DentistName)`

任何Beautifulsoup用户都可以帮助我吗?

1 个答案:

答案 0 :(得分:2)

使用CSS selectors

dentist_names = soup.select('dl span[id$="lblDentistName"]')
for span in dentist_names:
    print(span.text())

$=选择带有指定文字的 end 的属性。

CSS选择器也可用于查找所有class="icon.." span元素;它们按照它们在树中出现的顺序匹配:

soup.select('dl span[class^="icon"]')

^=匹配开头的类值(请注意,如果span有多个类,这可能不起作用。)