Как вы ищете строку в объекте BeautifulSoup?

#python #html #web-scraping #beautifulsoup

#python #HTML #веб-очистка #beautifulsoup

Вопрос:

Я проверяю публикации в Craigslist, чтобы узнать, были ли они помечены для удаления. Мой сценарий довольно прост:

 import requests
from bs4 import BeautifulSoup

def check_if_flagged(url):
    page = requests.get (url)
    soup = BeautifulSoup(page.content, 'html.parser')
    return ('flagged for removal' in soup)
  

Проблема в том, что у меня есть URL-адрес, который, как я точно знаю, был помечен для удаления, но check_if_flagged возвращается False . Это правильный способ поиска подстроки в объекте BeautifulSoup? Есть ли более оптимальный способ? Пожалуйста, дайте мне знать, если вы воспроизводите эту ошибку.

Вот URL-адрес для справки: ‘https://newyork.craigslist.org/brk/apa/d/brooklyn-1-bedroom-1-bath-apt-located/7206865558.html ‘

Ответ №1:

Для поиска текста в soup вы можете использовать text= свойство. Или вы можете просто выполнить поиск возвращаемого HTML-кода в виде строки:

 import requests
from bs4 import BeautifulSoup

def check_if_flagged(url):
    page = requests.get(url).text
    return 'this posting has been flagged for removal' in page.lower()

def check_if_flagged2(url):
    page = requests.get(url)
    soup = BeautifulSoup(page.content, 'html.parser')
    return bool(soup.find(text=lambda t: 'this posting has been flagged for removal' in t.lower()))

url = 'https://newyork.craigslist.org/brk/apa/d/brooklyn-1-bedroom-1-bath-apt-located/7206865558.html'
print(check_if_flagged(url))
print(check_if_flagged2(url))
  

С принтами:

 True
True