Есть ли способ прочитать ссылки в ячейке таблицы вместе со значениями, используя pandas и beautifulsoup - PullRequest
0 голосов
/ 19 апреля 2019

У меня есть таблица, в которой есть строки, и каждая строка имеет 6 столбцов. Я прочитал значения в столбцах и добавил их в фрейм данных, но в столбце 1 и 6 есть ссылки, которые я также хочу добавить. Я признаю, что я новичок в Python. Мне нужна помощь.

Я уже пытался создать новый фрейм данных и сохранить ссылку в первом столбце, но строки в обоих фреймах не совпадают.

import urllib3
from bs4 import BeautifulSoup
import pandas as pd
import time

COLUMNS = ['Legal Name', 'Status', 'Size', 'Suburb or Town', 'State', 'ABN']
COLUMNS2 = ['Link1']

urls = []
for i in range(3):
     quotepage = "https://www.acnc.gov.au/charity?items_per_page=60&"
     quotepage = quotepage + "facet__select__field_beneficiaries=0&"
     quotepage = quotepage + "facet__select__field_countries=0&"
     quotepage = quotepage + "facet__select__acnc_search_api_sub_history=0&"
     quotepage = quotepage + "facet__select__field_status=307&"
     quotepage = quotepage + "page="+str(i)+"#search"

     #print (quotepage)
     urls.append(quotepage)

i=0

dataframes = []
dataframes2 = []

cy_data = []
cy_data2 = []
for url in urls:
    i=i+1
    print(i)
    http = urllib3.PoolManager()
    response = http.request('GET', url)
    soup = BeautifulSoup(response.data, "html5lib")
    pagetable = soup.find('table')
    rows = soup.find("table").find_all('tr') 

    time.sleep(.5)
    for row in rows:
        cells = row.find_all("td") 
        cells = cells[0:6] # Select the correct columns
        cy_data.append([cell.text.strip() for cell in cells])

    links = pagetable.find_all("a")
    for link in links:
        if len(link["href"]) == 41:# href for charity
             cy_data2.append(link["href"])

dataframes.append(pd.DataFrame(cy_data, columns=COLUMNS).drop(0, axis=0))
dataframes2.append(pd.DataFrame(cy_data2, columns=COLUMNS2).drop(0, axis=0))
#data = pd.concat([dataframes, dataframes2], axis=1)
 data = pd.concat(dataframes)
 data2 = pd.concat(dataframes2)

Я хочу добавить ссылки на фрейм данных, вот и все.

1 Ответ

0 голосов
/ 19 апреля 2019

Не удаляйте нулевой индекс из фреймов данных, например:

dataframes.append(pd.DataFrame(cy_data, columns=COLUMNS))
dataframes2.append(pd.DataFrame(cy_data2, columns=COLUMNS2))

И изменить поиск кода строки на:

rows = soup.find("table").find("tbody").find_all('tr')

Результат:

DataFrame 1  [180 rows x 6 columns]
DataFrame 2  [180 rows x 1 columns]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...