Python 如何使用beautifulsoup仅提取文本?

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

我有这个html代码,我试图只提取像“0004”、“2020年3月”、“300950美元”等内容

   <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