【问题标题】:How to scrape text with no specific class如何抓取没有特定类的文本
【发布时间】:2021-03-11 18:13:06
【问题描述】:

如何抓取没有特定类的文本?我已经拉出了过去通过拍卖出售的 eBay 列表。这是标题部分的代码的 sn-p。

<h1 class="it-ttl" id="itemTitle" itemprop="name"><span class="g-hdn">Details about   </span>2018 Panini Contenders Josh Allen #105 No Feet RC Ticket Auto PSA 10 GEM

我希望能够只用请求和漂亮的汤刮掉文本“2018 年帕尼尼竞争者乔什·艾伦 #105 No Feet RC Ticket Auto PSA 10 GEM”,但没有分配给该特定文本的类。

这是我目前的代码...

my work

目前正在这条线上工作。

h1 = soup.find('h1', id="itemTitle")
    print(h1)

任何帮助将不胜感激。

【问题讨论】:

  • 如果只是文字可以使用h1.text
  • @Thymen 将在输出中包含Details about,这是 OP 不想要的
  • 对,你当然可以在之后过滤(python 3.9 removeprefix),但是Mendelg 的答案更简洁。

标签: python-3.x beautifulsoup python-requests


【解决方案1】:

尝试将find_next() 方法与text=True 一起使用,这将返回第一个文本匹配项,然后使用.next 获取之后的下一个文本。例如:

from bs4 import BeautifulSoup


html = '''
<h1 class="it-ttl" id="itemTitle" itemprop="name"><span class="g-hdn">Details about   </span>2018 Panini Contenders Josh Allen #105 No Feet RC Ticket Auto PSA 10 GEM
'''

soup = BeautifulSoup(html, "html.parser")

print(soup.find(id='itemTitle').find_next(text=True).next)

输出:

2018 Panini Contenders Josh Allen #105 No Feet RC Ticket Auto PSA 10 GEM

【讨论】:

    【解决方案2】:

    您可以根据 stripped_strings 生成器或将 itertools.islice 索引到生成器中的列表理解中。我发现后者可能来自@cobbal


    from bs4 import BeautifulSoup
    
    html = '''
    <h1 class="it-ttl" id="itemTitle" itemprop="name"><span class="g-hdn">Details about   </span>2018 Panini Contenders Josh Allen #105 No Feet RC Ticket Auto PSA 10 GEM
    '''
    
    soup = BeautifulSoup(html, "html.parser")
    
    print([s for s in soup.select_one('#itemTitle').stripped_strings][1])
    
    
    from itertools import islice
    
    next(islice(soup.select_one('#itemTitle').stripped_strings, 1, None))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-13
      • 2022-11-22
      • 2016-04-26
      • 2018-02-04
      相关资源
      最近更新 更多