CSS-селектор в soup.select () возвращает ноль - PullRequest
2 голосов
/ 28 сентября 2019

Я изучаю очистку веб-страниц и хочу получить данные с веб-страницы, которые соответствуют CSS, который я передаю soup.select("css locators").Когда я проверяю локаторы css на веб-странице, он выделяет правильные элементы, но когда я использую то же самое в методе soup.select(), он возвращает ноль или 0.

  1. Я получаю данныес веб-сайта: https://www.prokabaddi.com/teams/bengaluru-bulls-profile-1

  2. Селектор Css, используемый для извлечения данных с вышеуказанного веб-сайта: .si-section-header > span.si-title

  3. с вышеуказанным CSS при проверке веб-страницыв браузере он работает нормально, но когда я использую то же самое в методе soup.select(".si-section-header > span.si-title"), он возвращает ноль или 0

# code sample 
import requests 
import bs4 

URL = "https://www.prokabaddi.com/teams/bengaluru-bulls-profile-1"
r = requests.get(URL) 

soup = BeautifulSoup(r.content, 'html.parser') 
a = soup.select('.si-section-header > span.si-title')
Print(a)

Я ожидаю, что вывод вернет значения, выделенные селекторами CSS.В этом случае CSS выделяет 3 значения, поэтому я ожидаю, что он напечатает все три значения при выполнении приведенного выше кода.

Ответы [ 2 ]

2 голосов
/ 28 сентября 2019

Большие объемы контента добавляются динамически и не попадают в ваш первоначальный запрос.Элементы, которые вы просматриваете, являются частью шаблона, извлеченного из другого ресурса.Вы можете найти его на вкладке сети при обновлении страницы.

import requests
from bs4 import BeautifulSoup as bs

r = requests.get('https://www.prokabaddi.com/static-assets/kabaddi/views/kwl-team-stats-partial.html?v=1.064')
soup = bs(r.content, 'lxml')
print([i.text for i in soup.select('.si-title')])
0 голосов
/ 28 сентября 2019

В зависимости от данных, которые вы хотите, большая часть этих данных возвращается в формате JSON.

import requests

j = requests.get("https://www.prokabaddi.com/sifeeds/kabaddi/live/json/multisport_cache_25_3_pkl_0530_en_team_1.json").json()

for match in j['matches']:
    print(match)

Другие URL-адреса, которые могут содержать данные, которые вы хотите, включают:

https://www.prokabaddi.com/sifeeds/kabaddi/static/json/1_team.json

https://www.prokabaddi.com/sifeeds/kabaddi/live/json/multisport_cache_25_3_0_0530_en_4.json

Чтобы увидеть их все, откройте инструменты разработчика, выберите вкладку сети, затем XHR и обновите страницу

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