我有以下XML部分:
<section class="article-body">
<!-- <EdIndex> -->
<div class="squared-inline-picture-offset no-mobile">
<picture class="lazy square pull-left">
<img height="" width="" alt="" src="" class="loaded">
<noscript><img src="" width="" height="" alt="" /></noscript>
</picture>
</div>
<p>bla1 bla1 bla1</p>
<p>bla2 bla2 bla2</p>
<p>bla3 bla3 bla3</p>
<!-- </EdIndex> -->
<div class="adv no-mobile">
</div>
</section>
我需要提取&#34; bla bla bla&#34;部分。 我试过
soup = BeautifulSoup(data)
[...]
soup.findAll('section',{"class" : "article-body"})
结果不好:(
任何提示? 有没有快速的方法从http://schema.org/NewsArticle使用python和BeautifulSoup获取文章正文?
答案 0 :(得分:0)
当你说(&#39; section&#39;,{&#34; class&#34;:&#34; article-body&#34;})时,你要求的是身体类。这意味着它会给你带来好处......一切都回来......
您要做的是指定其中的项目。在这种情况下,您可以直接前往&#39; p&#39; 像这样。
>>> soup = BeautifulSoup(data)
>>> p = soup.findAll('p')
>>> print(p)
[<p>bla1 bla1 bla1</p>, <p>bla2 bla2 bla2</p>, <p>bla3 bla3 bla3</p>]
>>> print(p[1].text)
bla2 bla2 bla2
注意:你只能将.text放在列表项上,而不是列在自己的列表上。
您是否看到,它会找到所有p元素然后为您找到它找到的每个元素的列表。这将选择所有p元素,所以如果我想特别选择这个,你可以这样做:
soup = BeautifulSoup(data)
result = soup.find('section', {'class': 'article-body'})
results = result.findAll('p')
for p in results:
print(p, p.text)
输出:
<p>bla1 bla1 bla1</p> bla1 bla1 bla1
<p>bla2 bla2 bla2</p> bla2 bla2 bla2
<p>bla3 bla3 bla3</p> bla3 bla3 bla3
因此,要获取带有标题的元素的原始文本,您需要再次使用它。请记住,find all为您提供了一个列表,find为您提供了它所依赖的第一个元素。
编辑:修复了一些复制粘贴错误。