Красивый суп соскоб для переменной, которая не придет первым - PullRequest
0 голосов
/ 13 февраля 2019

Согласно Python - Ежедневная очистка веб-данных ETFs Я попытался выполнить чистку для соотношения расходов.

import requests
from bs4 import BeautifulSoup

html = requests.get("https://www.marketwatch.com/investing/fund/ivv").text

soup = BeautifulSoup(html, "html.parser")

if soup.h1.string == "Pardon Our Interruption...":
    print("They detected we are a bot. We hit a captcha.")
else:
    price = soup.find("li", class_="kv__item").find("span").string

    print(price)

Однако это возвращает результат для open.Как я могу сказать, чтобы он взял 10-й li, а не первый, поскольку он возвращается?

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

С последним bs4 вы определенно можете использовать css nth-of-type селектор

import requests
from bs4 import BeautifulSoup

html = requests.get("https://www.marketwatch.com/investing/fund/ivv").text

soup = BeautifulSoup(html, "lxml")

if soup.h1.string == "Pardon Our Interruption...":
    print("They detected we are a bot. We hit a captcha.")
else:
    price = soup.select_one('.list--kv li:nth-of-type(10) span').string
    print(price)

Вы можете даже сократить селектор до:

li:nth-of-type(10) span

Для списка диапазонов в li:

.list--kv li span
0 голосов
/ 13 февраля 2019

Вы можете использовать find_all ()

price = soup.find_all("li", class_="kv__item")[9].find("span").string
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...