findall в Beautifulsoup не работает для строк - PullRequest
0 голосов
/ 21 марта 2020

Я пытаюсь найти определенные строки c на странице HTML, которую я удалил. Я использовал метод find_all () в bs4 и предоставил строковый аргумент, но он не работает.

веб-страница: https://news.google.com/topics/CAAqJggKIiBDQkFTRWdvSUwyMHZNRGx6TVdZU0FtVnVHZ0pKVGlnQVAB?hl=en-IN&gl=IN&ceid=IN%3Aen

from bs4 import BeautifulSoup
import requests

def search(soup):                                                                                                                                        
    results = soup.find_all(string="Union",recursive=True)
    print(len(results))

web_url = "https://news.google.com/topics/CAAqJggKIiBDQkFTRWdvSUwyMHZNRGx6TVdZU0FtVnVHZ0pKVGlnQVAB?hl=en-IN&gl=IN&ceid=IN%3Aen"

r = requests.get(web_url)
soup = BeautifulSoup(r.text,'html.parser')

search(soup)

Я получаю значение len (результатов) равным нулю. Моя функция поиска неверна?

1 Ответ

1 голос
/ 21 марта 2020

При поиске со строковым аргументом вы заставляете findall () находить точные совпадения для каждого элемента Navigable. Вы можете сделать более простой поиск подходящих подстрок, используя regex logi c.

from bs4 import BeautifulSoup
import requests
import re

def search(soup):                                                                                                                                        
    results = soup.find_all(string=re.compile("Union"),recursive=True)
    print(len(results))

web_url = "https://news.google.com/topics/CAAqJggKIiBDQkFTRWdvSUwyMHZNRGx6TVdZU0FtVnVHZ0pKVGlnQVAB?hl=en-IN&gl=IN&ceid=IN%3Aen"

r = requests.get(web_url)
soup = BeautifulSoup(r.text,'html.parser')

search(soup)

За это я получаю 7 матчей

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...