【问题标题】:How to un-scrape first x number of p tag in a div and print rest of them?如何在 div 中取消抓取前 x 个 p 标签并打印其余部分?
【发布时间】:2021-10-25 10:00:10
【问题描述】:

过去几天我一直在学习 python。今天我带来了一个叫做网络抓取的主题。我正在尝试 scrape 除第一个 3 p 标签外的 div 内的所有 p 标签。由于 p 标签没有类或 id,我无法找到取消抓取它们的方法

我的代码:

from bs4 import BeautifulSoup

data = '''<div class="one">
    <p style="color:red">Dummy Text</p>
    <p style="color:red">Unwanted Text</p>
    <p style="color:red">No Text</p>
    <p style="color:red">Lorem ipsum dolor sit amet</p>
    <p style="color:red">sed do eiusmod tempor incididunt</p>
    <p style="color:red">consectetur adipiscing elit</p>
    <p style="color:red">ut labore et dolore magna</p>
</div>'''

text = BeautifulSoup(data, 'html.parser')
for result in text.find_all('p'):
    print(result.get_text())

我的输出:

  • 虚拟文本
  • 不需要的文本
  • 无文字
  • Lo​​rem ipsum dolor sit amet
  • sed 执行 eiusmod tempor 事件
  • consectetur adipiscing 精英
  • ut laboure et dolore magna

我需要什么:

  • Lo​​rem ipsum dolor sit amet
  • sed 执行 eiusmod tempor 事件
  • consectetur adipiscing 精英
  • ut laboure et dolore magna

由于我是 SOF 的新手,如果我违反了任何准则,请在评论中提及。

【问题讨论】:

    标签: python web-scraping


    【解决方案1】:

    您应该将 div 字符串添加到数组中以存储它们。然后,您应该删除数组的前三个元素。可以这样做:

    text = BeautifulSoup(data, 'html.parser')
    p_list = []
    for result in text.find_all('p'):
        p_list.append(result.get_text())
    # this selects all elements from the list after the third
    p_list = p_list[3:]
    

    这将为您提供一个列表,其中包含除前三个之外的所有 p 元素。

    【讨论】:

      【解决方案2】:

      方法一:

      根据您的要求查找所有p标签和索引

      soup = BeautifulSoup(data, 'html.parser')
      soup.find_all("p")[3:]
      

      方法二:

      soup = BeautifulSoup(data, 'html.parser')
      data=soup.select_one("div > p:nth-of-type(2)")
      data.find_next().find_next_siblings()
      

      代码分解:

      首先使用select_one方法并使用data返回的css选择器找到p标签 &lt;p style="color:red"&gt;No Text&lt;/p&gt;

      在最后一行,我们将找到所有下一个元素及其兄弟

      输出(两种方法相同):

      [<p style="color:red">Lorem ipsum dolor sit amet</p>,
       <p style="color:red">sed do eiusmod tempor incididunt</p>,
       <p style="color:red">consectetur adipiscing elit</p>,
       <p style="color:red">ut labore et dolore magna</p>]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-04-20
        • 1970-01-01
        • 1970-01-01
        • 2020-02-24
        • 1970-01-01
        • 2021-10-10
        • 1970-01-01
        相关资源
        最近更新 更多