python BeautifulSoup4 - почему результат печатается 5 раз? - PullRequest
0 голосов
/ 31 января 2020

Я пытаюсь сделать некоторую работу в Интернете в python, используя BeautifulSoup 4.

Я пытаюсь очистить зарплату работника c. Я делаю это успешно, но результат возвращается 5 раз, и я не могу понять, почему.

Вот мой сайт: https://data.richmond.com/salaries/2018/state/university-of-virginia/tony-bennett

Вот мой пример кода:

import requests
from bs4 import BeautifulSoup



source = requests.get(f'https://data.richmond.com/salaries/2018/state/university-of-virginia/tony-bennett')

soup = BeautifulSoup(source.text, 'html.parser')
main_box = soup.find_all('div')

for i in main_box:
    try:
        x = i.find('div', class_='col-12 col-lg-4 pay')
        z = x.find('h2').text
        print(z)

    except Exception:
        pass

И мои результаты:

$525,000
$525,000
$525,000
$525,000
$525,000

Это правильная зарплата, но, как я уже сказал, результаты печатаются 5 раз.

Если я go на странице, щелкните правой кнопкой мыши и «осмотрите», я найду класс Я ищу, что такое «col-12 col-lg-4 pay», а затем в этом теге «h2». Существует только один тег 'h2'. И распечатать текст этого.

Кажется, я что-то упустил, но что?

Ответы [ 2 ]

3 голосов
/ 31 января 2020

Я бы просто избавился от l oop и использовал бы более точный c запрос поиска

import requests
from bs4 import BeautifulSoup

source = requests.get(f'https://data.richmond.com/salaries/2018/state/university-of-virginia/tony-bennett')

soup = BeautifulSoup(source.text, 'html.parser')
main_box = soup.find("div", {"class": "pay"})
print(main_box.find('h2').text)
0 голосов
/ 01 февраля 2020

Вы также можете извлечь это с помощью CSS

import requests
import json
import pandas as pd
import numpy as np
from bs4 import BeautifulSoup

url = 'https://data.richmond.com/salaries/2018/state/university-of-virginia/tony-bennett'

res = requests.get(url).text
soup = BeautifulSoup(res , 'html.parser')

Value = soup.select('#paytotal')
print(Value[0].text)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...