Итерация и извлечение таблиц из веб-сохранения в виде файла Excel в Python - PullRequest
0 голосов
/ 21 января 2020

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

Как я могу это сделать? Спасибо.

xtra

Мой код пока:

import pandas as pd
import requests
from bs4 import BeautifulSoup
from tabulate import tabulate

url = 'http://zjj.sz.gov.cn/ztfw/gcjs/xmxx/jgysba/'
res = requests.get(url)
soup = BeautifulSoup(res.content,'lxml')
print(soup)

Новое обновление:

from requests import post
import json
import pandas as pd
import numpy as np

headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36",
        "Referer": "http://zjj.sz.gov.cn/projreg/public/jgys/jgysList.jsp"}
dfs = []
#dfs = pd.DataFrame()

for page in range(0, 10):
    data = {"limit": 100, "offset": page * 100, "pageNumber": page + 1}
    json_arr = requests.post("http://zjj.sz.gov.cn/projreg/public/jgys/webService/getJgysLogList.json", headers = headers, data = data).text
    d = json.loads(json_arr)
    df = pd.read_json(json.dumps(d['rows']) , orient='list')
    dfs.append(df)
    print(dfs)

dfs = pd.concat(dfs)
#https://stackoverflow.com/questions/57842073/pandas-how-to-drop-rows-when-all-float-columns-are-nan
dfs = dfs.loc[:, ~dfs.replace(0, np.nan).isna().all()]
dfs.to_excel('test.xlsx', index = False)

Он генерирует 10 страниц и 1000 строк, но некоторые значения столбцов смещены, кто-то знает, где я ошибся? Спасибо.

1 Ответ

1 голос
/ 21 января 2020

Итак, используя JSON API из XHR , вы делаете простой python post запрос через requests и у вас есть ваши данные.

В параметрах у вас есть два из них, которые вы можете изменить для получения разных объемов данных, limit - это количество объектов, которые вы получаете в запросе. pageNumber - это счетчик страниц с разбивкой по страницам.

from requests import post
import json

url = 'http://zjj.sz.gov.cn/projreg/public/jgys/webService/getJgysLogList.json'
data = { 'limit' : '100', 'pageNumber' : '1'}
response = post(url, data=d)
response.text

Кроме того, вы можете использовать pandas для создания фрейма данных или создания Excel по своему усмотрению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...