#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