Python 如何使用beautifulsoup仅提取文本?
我有这个html代码,我试图只提取像“0004”、“2020年3月”、“300950美元”等内容Python 如何使用beautifulsoup仅提取文本?,python,html,web-scraping,beautifulsoup,Python,Html,Web Scraping,Beautifulsoup,我有这个html代码,我试图只提取像“0004”、“2020年3月”、“300950美元”等内容 <ul class="plan-info-lst"> <li> <span>Homesite</span> 0004 </li> <li> <span>Est. availab
<ul class="plan-info-lst">
<li>
<span>Homesite</span>
0004
</li>
<li>
<span>Est. availability</span>
March 2020
</li>
<li>
<span>Priced From</span>
$300,950
<a href="javascript:void(0);" v-on:click="openEstimatedPaymentModal">Est. payment</a>
</li>
<li>
<span>Home Size</span>
2161 sq.ft.
</li>
<li>
<span>Stories</span>
2
</li>
<li>
<span>Beds</span>
3
</li>
<li>
<span>Baths</span>
2.5
</li>
<li>
<span>Garage</span>
2
</li>
</ul>
看起来像是一份工作!您可以使用它来匹配字符串中的模式。在您的例子中,所有数据都发生在
标记之后,后跟换行符和缩进。因此,如果我们这样匹配该模式:
重新导入
您的_data=[]。#初始化列表,以便我们可以在的范围外访问它
将open('your_file.html','r')作为f:
你的代码=f.read()
您的_data=re.findall('\n+(.+)',您的_代码)
打印(您的_数据)
我们可以获得输出
['0004'、'2020年3月'、'300950美元'、'2161平方英尺'、'2'、'3'、'2.5'、'2']
这有点不雅观,但可以在没有正则表达式的情况下完成(不推荐用于html):
首先添加:
from bs4 import NavigableString
然后
输出:
0004
March 2020
$300,950
2161 sq.ft.
2
3
2.5
2
0004
March 2020
$300,950
2161 sq.ft.
2
3
2.5
2
谢谢你的帮助!!我找到了一个非常简单的解决方案:
contents=[]
a=soup_level2.find('ul', class_ ='plan-info-lst')
for names in a.find_all('li'):
contents.append(names.span.next_sibling.strip())
另一个解决方案
from simplified_scrapy import SimplifiedDoc
doc = SimplifiedDoc(html)
lis = doc.selects('ul.plan-info-lst>li')
for li in lis:
# print (li.span.text)
print (li.span.nextText())
结果:
from simplified_scrapy import SimplifiedDoc
doc = SimplifiedDoc(html)
lis = doc.selects('ul.plan-info-lst>li')
for li in lis:
# print (li.span.text)
print (li.span.nextText())
0004
March 2020
$300,950
2161 sq.ft.
2
3
2.5
2