Получите количество фраз в URL-адресе, используя python и bs4 - PullRequest
2 голосов
/ 27 мая 2020

Я хочу получить счетчик любой фразы, появляющейся в URL-адресе, например, https://en.wikipedia.org/wiki/India.

import requests
from bs4 import BeautifulSoup
url = 'https://en.wikipedia.org/wiki/India'

r = requests.get(url)
soup = BeautifulSoup(r.text,'lxml')

Теперь я хочу получить количество фраз India is a в супе. Как go об этом?

Пожалуйста, предложите.

Ответы [ 2 ]

1 голос
/ 28 мая 2020

Я пробовал ниже, и то же самое работало нормально:

import re
import requests
url = 'https://en.wikipedia.org/wiki/India'

response = requests.get(url)
response_text = response.text
keyword = 'India is a'

match = re.findall("%s" % keyword, response_text)
count = (len(match))
count

Вывод: 9.

Этот код будет искать <head>, <body> и другие места.

1 голос
/ 27 мая 2020

Это можно сделать одним из двух способов.

Во-первых, общий знаменатель:

texts = soup.find_all(text=True)
cleaned = ["".join(t.strip()) for t in texts]
counter=0

Теперь, если вы хотите использовать регулярное выражение:

import re
regex = re.compile(r'\bIndia is a\b') 
for c in cleaned:
    if regex.match(c) is not None:
        counter+=1

Мне лично не нравится использовать регулярное выражение, кроме в крайнем случае, поэтому я бы сделал go более длинный путь

phrase = 'India is a'
for c in cleaned:   
            if phrase==c or phrase+' ' in c: 
                counter+=1      

В обоих случаях print(counter) выдает 6.

Обратите внимание, что они намеренно не учитывают 3 ситуации, когда фраза является частью более крупной фразы (например, India is also); учитывается только точная фраза или фраза, за которой следует пробел.

...