<div class="name">
<strong>
<a target="_blank" href="/page3.html">
SOME_Name_TEXT
</a>
</strong>
</div>
<div class="data">
<img src="/page1/page2/Images/pic.png" height="13" width="13">
SOME_Data_TEXT
</div>
我有一个包含不同类的html页面。我可以使用beautifulsoup
从不同的类中提取类“name”和“data”myName = soup.findAll("div", {"class" : "name"})
myData = soup.findAll("div", {"class" : "data"})
但是当我运行脚本并分别打印myName和myData元素时得到的结果:
  SOME_Name_TEXT(as a link)
 SOME_Data_TEXT
问题是我不想要Â。这是因为
2
在第一个和第二个。
我只想把结果作为:
SOME_Name_TEXT(as a link)
SOME_Data_TEXT
在第一部分中,需要链接“SOME_Name_TEXT”。 不需要数据部分中的图像,我只想要第二部分中的原始文本,即“SOME_Data_TEXT”。我试过用str.split()来做。我怎样才能得到确切的结果?
答案 0 :(得分:1)
由于您不想要&amp; nbsp,您可以执行以下操作:
myName = soup.findAll("div", {"class" : "name"})
myData = soup.findAll("div", {"class" : "data"})
if(myName && !soup.findAll(text=" "))
{
System.out.print(myName);
}
或第二种方法,这里str是你的myName:
str= " hey how are you doing"
str.decode("utf-8");
str = str.replace(" ", "")
print str
答案 1 :(得分:0)
您必须执行unicode替换才能删除
,因为BS会将HTML实体转换为unicode字符。
Edit:
soup.prettify(formatter=lambda x: x.replace(u'\xa0', ''))
其他选项:对于myData,要获取文本,请执行以下操作:
myData = soup.findAll("div", {"class" : "data"})[0].find('img').contents[0].strip()
和myName:
myName = repr(soup.findAll("div", {"class" : "name"})[0].find('a'))
myName = re.sub(' ', '', myName)
这对你有用吗?
答案 2 :(得分:0)
最后在其他问题的帮助下解决了这个问题:
第一部分即
<div class="name">
<strong>
<a target="_blank" href="/page3.html">
SOME_Name_TEXT
</a>
</strong>
</div>
让这个块在x中,然后我使用print x.findNext('strong')
而对于第二部分,即
<div class="data">
<img src="/page1/page2/Images/pic.png" height="13" width="13">
SOME_Data_TEXT
</div>
我确实喜欢:
tmp = x.findNext('img')
print tmp.get_text().strip()