Точное совпадение текста, если заявление Python Beautifulsoup - PullRequest
0 голосов
/ 13 декабря 2018

Я пытаюсь найти «точное совпадение текста», используя приведенный ниже код.Веб-сайт: https://www.girafferestaurant.co.nz/menu. Когда я печатаю (soup.find_all (text = True)), я могу вернуть текст и выполнить поиск, но я просто хочу найти совпадение или нет, в зависимости от того, используется ли слово / фраза (в этомcase 'предлагая Giraffe') есть в заявлении.

Ниже я попробовал.

text = soup.find_all(text=True)
if 'offering at Giraffe' in text:
     print ("Match")
else: 
     print ("No Match")

Также я использовал text = soup.find_all ('p') но текст не всегда в тегах p, так как он находится на разных сайтах.

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018
import bs4
import requests

url = 'https://www.girafferestaurant.co.nz/menu'
r  = requests.get(url)
soup = bs4.BeautifulSoup(r.text,'html.parser')

text = soup.find_all(text=True)
matches = []

for item in text:
    if 'offering at Giraffe' in item:
        matches.append(item)

if matches != []:
    print ('Match')
else: 
     print ("No Match")

РЕДАКТИРОВАТЬ: для последующего наблюдения.Если вы просто хотите проверить весь текст:

import bs4
import requests

url = 'https://www.girafferestaurant.co.nz/menu'
r  = requests.get(url)
soup = bs4.BeautifulSoup(r.text,'html.parser')

text = soup.text
matches = []

if 'offering at Giraffe' in text and 'customised set' not in text:
        matches.append(text)

if matches != []:
    print ('Match')
else: 
     print ("No Match")
0 голосов
/ 13 декабря 2018

Существует несколько способов поиска по тексту с помощью BeautifulSoup:

  • функция поиска .Используйте функцию в качестве значения text:

    results = soup.find_all(text=lambda text: text and 'offering at Giraffe' in text)
    
  • регулярное выражение .Используйте шаблон регулярного выражения в качестве значения text:

    import re
    
    results = soup.find_all(text=re.compile(r'offering at Giraffe'))
    
...