使用BeautifulSoup解析html文件

时间:2014-12-05 17:48:45

标签: python beautifulsoup html-parsing

我有这个html文件:

<html>
    <head></head>
    <body>
        Text1  
        Text2
        <a href="XYCL7Q.html">
            Text3 
        </a>
    </body>
</html>

我想单独收集Text1,Text2和Text3。对于Text3我没有问题,但我无法捕获Text1-2;通过这样做:

 from urllib import urlopen
 from bs4 import BeautifulSoup

 url = 'myUrl';
 html = urlopen(url).read()
 soup = BeautifulSoup(html)
 soup.body.get_text()

由于Text1-2可能包含一些空格,因此我得到所有文本(因为我再次获得Text3后的第一个问题)没有很好地分离...例如,如果Text1是“hello world”而Text2是“foo bar”,那么结束我想要一个2个字符串的列表:

 results = ['hello world', 'foo bar'] 

我该怎么做?谢谢你的答案......

1 个答案:

答案 0 :(得分:0)

您想要的文本是&#34; body&#34;的第一个子节点。你可以把它拉出来并去除污垢

>>> from bs4 import BeautifulSoup as bs
>>> soup=bs("""<html>
...     <head></head>
...     <body>
...         Text1  
...         Text2
...         <a href="XYCL7Q.html">
...             Text3 
...         </a>
...     </body>
... </html>""")
...
>>> body=soup.find('body')
>>> type(next(body.children))
<class 'bs4.element.NavigableString'>
>>> next(body.children)
u'\n        Text1  \n        Text2\n        '
>>> [stripped for stripped in (item.strip() for item in next(body.children).split('\n')) if stripped]
[u'Text1', u'Text2']