【问题标题】:How to scrape a specific <p> with no class?如何在没有类的情况下抓取特定的 <p>?
【发布时间】:2021-12-03 15:47:27
【问题描述】:

我对网络抓取非常陌生。 我去刮了

<div class="p3">
<div>
<span class="poptip"><strong>BP</strong></span>
<p>110</p></div>
<div>
<span class="poptip"><strong>Weight</strong></span>
<p>55</p></div>
<div>
<span class="poptip"><strong>Age</strong></span>
<p>28</p></div>
<div>
<span class="poptip"><strong>Height</strong></span>
<p>155</p></div>
</div>

我要刮的是 155。(这是高度)

我想将所有 p.text 元素放入一个列表中,然后从中取出最后一个。 但是当我尝试时,只有 110 作为输出。 (甚至不是 110、55、28、155 的列表)如何将所有 p.text 放入数组中?

这是我的尝试:

p_list=[]
data =soup.find_all('div', class_='p3')
for info in data:
  p_data = para.find('p').text
  p_list.append(p_data)
  print(p_list)

或者,如果&lt;p&gt;标签的前一个跨度中的文本是“高度”,有没有办法获取&lt;p&gt;标签中的文本?

非常感谢您作为初学者的帮助。

【问题讨论】:

    标签: python web-scraping beautifulsoup


    【解决方案1】:

    您可以使用class_=False 作为您的属性选择器

    如果你只想得到高度,那么就抓住最后一个元素:

    soup = bs4.BeautifulSoup(html, 'lxml')
    height = soup.find('div', class_='p3').findAll('p', class_=False)[-1]
    print(height.text)
    
    >>> 155
    

    如果要选择所有元素,则可以使用zip 构建映射

    soup = bs4.BeautifulSoup(html, 'lxml')
    div = soup.find('div', class_='p3')
    
    tags = div.findAll('span')
    nums = div.findAll('p', class_=False)
    
    attrs = {k.text: int(v.text) for k, v, in zip(tags, nums)}
    print(attrs)
    >>> {'BP': 110, 'Weight': 55, 'Age': 28, 'Height': 155}
    

    【讨论】:

      【解决方案2】:

      我要刮的是 155。(这是高度)

      选项#1

      要获取 &lt;div&gt; 中最后一个 &lt;p&gt; 的文本,类为“p3”,您可以使用 css selectors

      soup.select_one('div.p3 :last-child p').text
      
      选项#2

      作为替代,您可以创建所有&lt;p&gt; 的文本列表:

      [x.text for x in soup.select('div.p3 p')][-1]
      
      选项#3

      或者,如果&lt;p&gt;标签的前一个跨度中的文本是“高度”,有没有办法获取&lt;p&gt;标签中的文本?

      找到包含“高度”的&lt;strong&gt;parent 及其直接&lt;p&gt;

      soup.select_one('div:has(>:-soup-contains(Height) :not(class)) >p').text
      

      【讨论】:

        猜你喜欢
        • 2020-07-31
        • 1970-01-01
        • 1970-01-01
        • 2021-03-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-05
        • 2019-08-13
        相关资源
        最近更新 更多