【问题标题】:How to get all the p tags from the soup object如何从汤对象中获取所有 p 标签
【发布时间】:2026-01-07 13:25:05
【问题描述】:

我正在抓取 Kickstarter 的评论。我能够获得评论者的姓名和包含评论的第一个p 标签。但是对于一些评论,我想删除额外的p 标签。如何做到这一点。

这是我写的代码。

from selenium import webdriver
from bs4 import BeautifulSoup as bs
import requests

driver = webdriver.Chrome(
    executable_path=r'C:\Users\silvi\projects\selenium_basics\chromedriver.exe')
url = 'https://www.sitejabber.com/reviews/kickstarter.com'
# driver.get(url)

soup = bs(requests.get(url).content, "html.parser")

for review in soup.select('div .url-reviews .review'):
    name = review.a.get_text(strip=True, separator=" ")
    customer_review = review.find('p').text
    print(name)
    print(customer_review)
    print()
driver.quit()

【问题讨论】:

  • 你做了什么来尝试获取其他p标签?
  • 我尝试使用 findAll 但这不起作用。如果我使用 customer_review = review.find('div').text 我会得到我想要的结果,还有其他信息,比如评论,谢谢,作为公司回复。我想避免刮掉那些,只刮p标签。
  • 如果您发布了您尝试使用findall 的方法,那么有人可能会指出如何解决它。

标签: python-3.x web-scraping beautifulsoup


【解决方案1】:

您可以使用review.find_all('p'),然后使用列表推导从所有文本中获取文本,跳过第一个,因为您已经在customer_review 中获得了文本

for review in soup.select('div .url-reviews .review'):
    name = review.a.get_text(strip=True, separator=" ")
    customer_review = review.find('p').text
    other_ps = [p.text for p in review.find_all('p')[1:]]
    
    print(name)
    print(customer_review)
    print(other_ps)

输出:

【讨论】:

    【解决方案2】:
    from selenium import webdriver
    from bs4 import BeautifulSoup as bs
    import requests
    
    driver = webdriver.Chrome(
        executable_path=r'C:\Users\silvi\projects\selenium_basics\chromedriver.exe')
    url = 'https://www.sitejabber.com/reviews/kickstarter.com'
    # driver.get(url)
    
    soup = bs(requests.get(url).content, "html.parser")
    divs=soup.findAll('div',{"class": ["url-reviews","review"]})
    for review in divs:
        name = review.a.get_text(strip=True, separator=" ")
        print(name)
        customer_review = review.find_all('p')
        print("========================")
        for p in customer_review:
            print(p.text)
            print(" - - - -")
    driver.quit()
    

    使用 customer_review = review.find_all('p') 并使用 for 打印其元素文本

    【讨论】:

      最近更新 更多