Превратите html стол в CSV с помощью Beautifulsoup - PullRequest
0 голосов
/ 20 апреля 2020

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

from lxml import html
import requests
from bs4 import BeautifulSoup
import pandas as pd

website_url = requests.get('https://thereserve2.apx.com/mymodule/reg/prjView.asp?id1=1295').text
soup = BeautifulSoup(website_url,'lxml')
print(soup.prettify())

table = soup.table
table_rows = table.find_all('tr')

for tr in table_rows:
    td = tr.find_all('td')
    row = [i.text for i in td]
    print(row)

df = pd.DataFrame()
df['Rows'] = row
df

В выходных данных отображается таблица типа ['Column 1','Column 2'], поэтому должно быть легко превратить ее в экспортируемую таблицу, но по какой-то причине она не работает.

Ответы [ 2 ]

0 голосов
/ 20 апреля 2020
import pandas as pd

df = pd.read_html(
    "https://thereserve2.apx.com/mymodule/reg/prjView.asp?id1=1295", skiprows=1)[0]

new = pd.DataFrame([df.iloc[:, 4].to_list()], columns=df.iloc[:, 3].to_list())

print(new)

new.to_csv("data.csv", index=False)

Вывод: просмотр в режиме онлайн

enter image description here

0 голосов
/ 20 апреля 2020
import requests
from bs4 import BeautifulSoup
import pandas as pd


website_url = requests.get('https://thereserve2.apx.com/mymodule/reg/prjView.asp?id1=1295').text
soup = BeautifulSoup(website_url,'html.parser')
table = soup.table
table_rows = table.find_all('tr')

data = {}
for tr in table_rows:
    td = tr.find_all('td')
    if len(td) != 2 : continue
    data[td[0].text] = td[1].text.strip()

data_frame = pd.DataFrame([data], columns=data.keys())

data_frame.to_csv('output.csv', index=False)

enter image description here

...