Python 使用Beautifulsoup从html页面提取数据

Python 使用Beautifulsoup从html页面提取数据,python,html,string,beautifulsoup,Python,Html,String,Beautifulsoup,但运行脚本并分别打印myName和myData元素时得到的结果是: myName = soup.findAll("div", {"class" : "name"}) myData = soup.findAll("div", {"class" : "data"}) 问题是我不想要。这是由于 两个在第一个位置,一个在第二个位置 我只希望结果是: Â Â SOME_Name_TEXT(as a link) Â SOME_Data_TEXT 在第一部分中,需要与“SOME_Name_TEXT”链接。

但运行脚本并分别打印myName和myData元素时得到的结果是:

myName = soup.findAll("div", {"class" : "name"})
myData = soup.findAll("div", {"class" : "data"})
问题是我不想要。这是由于 两个
在第一个位置,一个在第二个位置

我只希望结果是:

  SOME_Name_TEXT(as a link)
 SOME_Data_TEXT
在第一部分中,需要与“SOME_Name_TEXT”链接。
不需要数据部分中的图像,我只需要第二部分中的原始文本,即“一些数据文本”。我试着用str.split()来做。我怎样才能得到准确的结果

您必须执行unicode替换以删除
,因为BS将HTML实体转换为unicode字符

SOME_Name_TEXT(as a link)
SOME_Data_TEXT
其他选项:对于myData,要仅获取文本,请执行以下操作:

Edit:
soup.prettify(formatter=lambda x: x.replace(u'\xa0', ''))
至于我的名字:

myData = soup.findAll("div", {"class" : "data"})[0].find('img').contents[0].strip()

这对你有用吗?

既然你不想要,你可以这样做:

myName = repr(soup.findAll("div", {"class" : "name"})[0].find('a'))
myName = re.sub(' ', '', myName)
或者第二种方法,这里是您的myName:

myName = soup.findAll("div", {"class" : "name"})
myData = soup.findAll("div", {"class" : "data"})
if(myName && !soup.findAll(text=" "))
{
    System.out.print(myName);
}

在其他问题的帮助下,最终解决了这个问题:

第一部分,即

str= "  hey how are you doing"
str.decode("utf-8");
str = str.replace(" ", "")
print str
我喜欢:

<div class="data">
  <img src="/page1/page2/Images/pic.png" height="13" width="13">
  &nbsp; SOME_Data_TEXT
</div>

我收到错误:
:“ascii”编解码器无法解码第22位的字节0xc2:序号不在范围(128)内。
很抱歉,它仍然无法工作。结果没有变化。您使用的是什么版本的BS?确定使用strip()方法尝试新的编辑。如果这样做有效,那么您应该能够对“myName”执行相同的过程不,我希望数据不带“”。我不想失去任何结果。我试过str.replace(“,”);它不起作用。如果BS将实体转换为unicode,第二种方法将不起作用。将utf-8添加为字符集@Arewegood,因为第二种方法对我有效。@fscore:它不再起作用了。不知道有什么问题。@我们可以将网页上传到某个网站,并发送链接给我,以便正确测试它吗
<div class="name">
      &nbsp;&nbsp;
      <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">
  &nbsp; SOME_Data_TEXT
</div>
tmp = x.findNext('img')
print tmp.get_text().strip()