美联4+;python:string返回';无';

美联4+;python:string返回';无';,python,parsing,html-parsing,beautifulsoup,Python,Parsing,Html Parsing,Beautifulsoup,我试图用BeautifulSoup4和Python2.7.6解析一些html,但是字符串返回“None”。我试图解析的HTML是: <div class="booker-booking"> 2&nbsp;rooms &#0183; USD&nbsp;0 <!-- Commission: USD --> </div> 我还尝试了以下两种方法: data = soup.find('div', class_

我试图用BeautifulSoup4和Python2.7.6解析一些html,但是字符串返回“None”。我试图解析的HTML是:

<div class="booker-booking">
    2&nbsp;rooms
    &#0183;
    USD&nbsp;0
    <!-- Commission: USD  -->
</div>
我还尝试了以下两种方法:

data = soup.find('div', class_='booker-booking').text
data = soup.find('div', class_='booker-booking').contents[0]
两者都返回:

u'\n\t\t2\xa0rooms \n\t\t\xb7\n\t\tUSD\xa00\n\t\t\n

我最终尝试将第一行放入一个变量中,只说“2个房间”,将第三行放入另一个变量中,只说“USD 0”。

完成
data=soup.find('div',class='booker-booking')。text
您已经从HTML中提取了所需的数据。现在,您只需将其格式化为“2个房间”和“0美元”。第一步可能是按行拆分数据:

import string
lines = string.split(data, '\n')
这将给出
[u',u'\t\t2\xa0rooms',u'\t\xb7',u'\t\tUSD\xa00',u'\t\t',u']

现在,您需要去掉空白,取消html字符的scape,并删除没有数据的行:

import HTMLParser
h = HTMLParser.HTMLParser()
formatted_lines =  [string.strip(h.unescape(line)) for line in lines if len(line) > 3]
您将得到所需的数据:

print formatted_lines[0]
#2 rooms
print formatted_lines[1]
#USD 0

.string
返回
None
,因为文本节点不是唯一的子节点(有注释)

要删除Unicode空格,请执行以下操作:

text = " ".join(text.split())
# -> u'2 rooms \xb7 USD 0'
print text
# -> 2 rooms · USD 0
要获取最终变量,请执行以下操作:

var1, var2 = [s.strip() for s in text.split(u"\xb7")]
# -> u'2 rooms', u'USD 0'

“class”之后应该有“uu”吗?而且,我没有看到任何“None”在这里被返回……是的。这是beautifulsoup如何识别DIV类,而不是python认为它是python类。那么soup.find(DIV,{“class”:“booker booking”})呢?也返回“None”。但您说它们返回u'\n\t\t2\xa0rooms\n\t\t\xb7\n\t\tUSD\xa00\n\t\t\n',这是一个unicode字符串。。。
text = " ".join(text.split())
# -> u'2 rooms \xb7 USD 0'
print text
# -> 2 rooms · USD 0
var1, var2 = [s.strip() for s in text.split(u"\xb7")]
# -> u'2 rooms', u'USD 0'