Сужение того, что я соскребаю с веб-сайта, используя python - PullRequest
2 голосов
/ 25 марта 2020

Я пытаюсь попрактиковаться в python просмотре веб-сайтов, но мне сложно сузить его до разумного размера без python, не понимая, о чем я прошу. Например, вот мой код:

import bs4
import requests

url = requests.get('https://ballotpedia.org/Alabama_Supreme_Court')
soup = bs4.BeautifulSoup(url.text, 'html.parser')
y = soup.find('table')
print(y)

Я пытаюсь вычеркнуть имена судей Верховного суда штата Алабама, но с этим кодом я получаю слишком много информации. Я пробовал такие вещи, как (в строке 6)

y = soup.find('table',{'class':'wikitable sortable'})`

, но получаю сообщение о том, что поиск не дал результатов.

Вот изображение проверки веб-страницы. Я стремлюсь заставить thead работать в моем коде, но мне не удается!

Как я могу указать python, что я хочу только имена судей?

Большое спасибо!

1 Ответ

3 голосов
/ 25 марта 2020

Просто я сделаю это следующим образом.

import pandas as pd

df = pd.read_html("https://ballotpedia.org/Alabama_Supreme_Court")[2]["Judge"]

print(df.to_list())

Вывод:

['Brad Mendheim', 'Kelli Wise', 'Michael Bolin', 'William Sellers', 'Sarah Stewart', 'Greg Shaw', 'Tommy Bryan', 'Jay Mitchell', 'Tom 
Parker']

Теперь вернемся к исходному issue, чтобы решить, как я лично я люблю исправлять реальные проблемы, не переходя к альтернативным решениям.

есть разница между find, который вернет только первое element, но find_all вернет list из elements. Проверьте Документация .

импортировать напрямую from bs4 import BeautifulSoup вместо import bs4, поскольку это DRY Принцип из Python.

Оставьте bs4 для обработки контента, поскольку это одна из его задач на заднем плане. поэтому вместо r.text используйте r.content

Теперь мы углубимся в HTML, чтобы выбрать его:

from bs4 import BeautifulSoup
import requests

r = requests.get("https://ballotpedia.org/Alabama_Supreme_Court")
soup = BeautifulSoup(r.content, 'html.parser')


print([item.text for item in soup.select(
    "table.wikitable.sortable.jquery-tablesorter a")])

Теперь вам нужно прочитать о CSS -Выбор

Выход:

['Brad Mendheim', 'Kelli Wise', 'Michael Bolin', 'William Sellers', 'Sarah Stewart', 'Greg Shaw', 'Tommy Bryan', 'Jay Mitchell', 'Tom Parker']
...