Как я могу исправить этот python код, чтобы получить все имена людей в таблице, на которую я ссылаюсь в коде? - PullRequest
0 голосов
/ 27 марта 2020

Я пытаюсь заставить python сообщить мне имена сенаторов штата из Алабамы на Баллотпедии. Тем не менее, код, который я собрал, дает мне только заголовок, который я запросил по URL, но я не получаю никаких имен. Вот мой текущий python код:

import requests
from bs4 import BeautifulSoup
import pandas as pd

list = ['https://ballotpedia.org/Alabama_State_Senate']

temp_dict = {}

for page in list:
    r = requests.get(page)
    soup = BeautifulSoup(r.content, 'html.parser')

    temp_dict[page.split('/')[-1]] = [item.text for item in 
soup.select("table.bptable gray sortable tablesorter 
jquery-tablesorter a")]

df = pd.DataFrame.from_dict(temp_dict, 
orient='index').transpose()

Я считаю, что моя ошибка в этой строке:

    temp_dict[page.split('/')[-1]] = [item.text for item in soup.select("table.bptable gray sortable tablesorter jquery-tablesorter a")]

Спасибо.

Ответы [ 2 ]

2 голосов
/ 28 марта 2020

Мне кажется, это работает:

import requests
from bs4 import BeautifulSoup

url = "https://ballotpedia.org/Alabama_State_Senate"

response = requests.get(url)
response.raise_for_status()

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

for row in soup.find(id="officeholder-table").select("tr:not([colspan])"):
    name = row.select_one("td:nth-of-type(2)").text
    print(name)
0 голосов
/ 28 марта 2020

Другой способ получить всю информацию:

holders = soup.select("#officeholder-table")
targets = holders[0].select('tr')
for target in targets:
    print(target.text)

Вывод:

Alabama State Senate District 20
Linda Coleman-Madison
Democratic 
2006

et c.

...