【问题标题】:requesting different paragraphs of the body part of different articles with bs4使用 bs4 请求不同文章正文部分的不同段落
【发布时间】:2021-04-24 05:40:01
【问题描述】:

我需要页面上不同文章的正文部分。它们被写在一个 section 标签中,每个段落包含几个 p 标签。喜欢:

<section class="...">
 <div>...</div>
 <figure>...</figure>
 <p id='...' class='...'></p>
 <p id='...' class='...'></p>
 <p id='...' class='...'></p>
</section>

<section class="...">
 <div>...</div>
 <figure>...</figure>
 <p id='...' class='...'></p>
 <p id='...' class='...'></p>
 <p id='...' class='...'></p>
</section>

如果我使用下面的代码:

import requests
import re
from bs4 import BeautifulSoup

r = requests.get('url')

all_bodies = soup.find_all('section')
for i in range(len(all_bodies)):
    print(all_bodies[i])

它返回部分的完整内容,如果我将 p 标签添加到 find_all,它会将每个 p 标签作为列表的一个元素返回,但我希望一个部分的整个 p 标签在一个列表元素中。

【问题讨论】:

    标签: python web-scraping beautifulsoup python-requests tags


    【解决方案1】:

    编辑

    示例

    from bs4 import BeautifulSoup
    
    html = '''
    <section class="...">
     <div>...</div>
     <figure>...</figure>
     <p id='...' class='...'>1</p>
     <p id='...' class='...'>2</p>
     <p id='...' class='...'>3</p>
    </section>
    
    <section class="...">
     <div>...</div>
     <figure>...</figure>
     <p id='...' class='...'>1</p>
     <p id='...' class='...'>2</p>
     <p id='...' class='...'>3</p>
    </section>
    '''
    soup = BeautifulSoup(html, 'lxml')
    
    [e.select('p') for e in soup.select('section')]
    

    输出

     [[<p class="..." id="...">1</p>,
      <p class="..." id="...">2</p>,
      <p class="..." id="...">3</p>],
     [<p class="..." id="...">1</p>,
      <p class="..." id="...">2</p>,
      <p class="..." id="...">3</p>]]
    

    【讨论】:

    • 这提供了所有 p 标签作为列表的一个元素,但我需要一个部分的整个 p 标签作为一个元素。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-16
    • 2011-06-29
    • 1970-01-01
    • 1970-01-01
    • 2020-03-02
    • 1970-01-01
    相关资源
    最近更新 更多