使用BeautifulSoup Python从<li>获取单个数据作为文本

时间:2018-01-20 11:43:06

标签: python html beautifulsoup

这是我希望从中获取数据的HTML文件的一部分。

<ul class="listing-key-specs ">
   <li>2002 (02 reg)</li>
   <li>Hatchback</li>
   <li>115,000 miles</li>
   <li>Manual</li>
   <li>1.8L</li>
   <li>123 bhp</li>
   <li>Petrol</li>
</ul>

这就是我从文档的其余部分中提取<ul>的方法

soup = BeautifulSoup(page.content, 'html.parser')
vehicle_details = soup.find_all('ul', class_='listing-key-specs')
split_details = vehicle_details[2].get_text()
print (split_details)

从这行代码我得到这个输出

 2002 (02 reg)
 Hatchback
 115,000 miles
 Manual
 1.8L
 123 bhp
 Petrol

但是,我想要做的是从输出中获取每一行并放入一个列表,这样第一行就是第一个索引,依此类推。但是当我通过换行符拆分输出时,我得到了这个输出

 split_details = split_details.split('\n')
 ['', '2002 (02 reg)', 'Hatchback', '115,000 miles', 'Manual', '1.8L', '123 bhp', 'Petrol', '']

这不是我想要的。有没有我缺少的东西,还是有另一种方法将这个字符串分成几行?

This is the website如果你很好奇。

2 个答案:

答案 0 :(得分:0)

在这种情况下,最好使用stripped_strings生成器。它包含标记及其后代中的所有字符串,删除了空格字符。一个例子,

summingInt
  

[&#39; 2002(02 reg)&#39;,&#39; Hatchback&#39;,&#39; 115,000 miles&#39;,&#39; Manual&#39;,&#39; 1.8L&#39;,&#39; 123 bhp&#39;,&#39;汽油&#39;]

或者你可以使用1 - html = '''<ul class="listing-key-specs "> <li>2002 (02 reg)</li> <li>Hatchback</li> <li>115,000 miles</li> <li>Manual</li> <li>1.8L</li> <li>123 bhp</li> <li>Petrol</li> </ul>''' soup = BeautifulSoup(html, 'html.parser') vehicle_details = soup.find('ul', class_='listing-key-specs') split_details = list(vehicle_details.stripped_strings) print(split_details) 进行剥离和加入 - 但它会返回一个字符串而不是一个列表。

get_text
  

2002(02 reg),两厢车,115,000英里,手动,1.8L,123马力,汽油

答案 1 :(得分:0)

如果您需要列表,可以使用list comprehension

html = '''<ul class="listing-key-specs ">
    <li>2002 (02 reg)</li>
    <li>Hatchback</li>
    <li>115,000 miles</li>
    <li>Manual</li>
    <li>1.8L</li>
    <li>123 bhp</li>
    <li>Petrol</li>
</ul>'''

soup = BeautifulSoup(html, 'html.parser')
vehicle_details = [x.text for x in soup.find('ul', {'class': 'listing-key-specs'}).find_all('li')]
print(vehicle_details)

输出:

['2002 (02 reg)', 'Hatchback', '115,000 miles', 'Manual', '1.8L', '123 bhp', 'Petrol']

如果您想在单个字符串中添加详细信息,可以添加此

vehicle_details_string = ', '.join(vehicle_details)
print(vehicle_details_string)

输出:

2002 (02 reg), Hatchback, 115,000 miles, Manual, 1.8L, 123 bhp, Petrol