Создание таблицы в Python с BeautifulSoup - PullRequest
0 голосов
/ 07 сентября 2018

Впервые на python, и у меня есть вопрос о создании таблицы из скрапа с использованием Beautiful soup. Вот код, который я использую:

import requests
page=requests.get("https://www.opensecrets.org/lobby/lobbyist.php?id=Y0000008510L&year=2018")
from bs4 import BeautifulSoup
soup=BeautifulSoup(page.content, 'lxml')
table=soup.find(‘table’,{‘id’:’lobbyist_summary’})
for row in table:
    cells=row.find_all(‘a’)
    rn=cells[0].get_text()

Ошибка:

AttributeError: 'NavigableString' object has no attribute 'find_all'

печать (таблица) выглядит так:

[<a href="firmsum.php?id=D000037635&amp;year=2018">Ballard Partners</a>, <a href="clientsum.php?id=F203227&amp;year=2018">Advanced Roofing Inc</a>, <a href="clientsum.php?id=F214670&amp;year=2018">Africell Holding</a>, <a href="clientsum.php?id=D000023883&amp;year=2018">Amazon.com</a>, ...]

Я бы хотел (в конце концов) закончить с таблицей, в которой каждый интересующий элемент находится в отдельном столбце, чтобы он выглядел следующим образом:

[[firmum, D000037635,2018, Ballard Partners], [clientum, F203227,2018, Advanced Roofing Inc], [clientsum, F214670,2018, Africell Holding], [clientsum, D000023883, 2018, Amazon.com]. ..]

1 Ответ

0 голосов
/ 07 сентября 2018

Назначить 4 пустых списка:

col1List = list()
col2List = list()
col3List = list()
col4List = list()

Сначала давайте получим значения столбца 4:

trs = table.find_all('tr')[1]
tds = trs.find_all('a')

for i in range(len(tds)):
    col4List.append(tds[i].get_text())

Это дает:

['Ballard Partners', 'Advanced Roofing Inc', 'Africell Holding',....]

Теперь давайте извлечем значения для первых 3 столбцов из href:

hrefVal = trs.find_all('a')

for i in hrefVal:
    hVal = i.get('href')
    col11 = hVal.split('.php?id=', 1)
    col1 = col11[0]
    col1List.append(col1)
    col22 = col11[1].split('&', 1)
    col2 = col22[0]
    col2List.append(col2)
    col33 = col22[1].split('=', 1)
    col3 = col33[1]
    col3List.append(col3)

Теперь давайте поместим все списки в фрейм данных, чтобы он выглядел аккуратно:

import pandas as pd

df = pd.DataFrame()
df['Col1'] = col1List
df['Col2'] = col2List
df['Col3'] = col3List
df['Col4'] = col4List

Если я выведу первые несколько строк, это будет выглядеть так, как вы хотите:

Col1        Col2        Col3    Col4
firmsum     D000037635  2018    Ballard Partners
clientsum   F203227     2018    Advanced Roofing Inc
clientsum   F214670     2018    Africell Holding
clientsum   D000023883  2018    Amazon.com
clientsum   D000000192  2018    American Health Care Assn
clientsum   D000021839  2018    American Road & Transport Builders Assn
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...