这是我希望从中获取数据的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如果你很好奇。
答案 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