【问题标题】:Iterate and extract tables from web saving as excel file in Python在Python中迭代并从Web保存中提取表格作为excel文件
【发布时间】:2020-01-21 06:08:44
【问题描述】:

我想从链接here 中迭代和提取表格,然后保存为 excel 文件。

我该怎么做?谢谢。

到目前为止我的代码:

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 行,但是有些列值放错了位置,有人知道我哪里做错了吗?谢谢。

【问题讨论】:

  • 您是否编写了任何代码来获取此数据?如果你这样做了,请将其与问题以及面临的问题(如果有)一起发布。
  • 是的,必须知道您无法通过bs4 获取 javascript 注入数据。但是,如果您查看“网络”选项卡,则会有一个包含所有分页数据的 JSON API。您可以使用它直接获取您想要的数据。
  • 您能帮忙修改一下代码吗? @ans2human

标签: pandas web-scraping python-requests web-crawler python-3.6


【解决方案1】:

因此,使用 XHR 中的JSON API,您可以通过requests 发出一个简单的python post 请求,然后您就有了数据。

在参数中,您可以更改其中两个以获取不同数量的数据,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。

【讨论】:

  • 谢谢,我更新了我的完整代码,但结果似乎不正确,你能检查一下我做错了什么吗?
  • 是的,让我检查一下。
  • 只是想知道您是否在我的代码中发现了任何问题? @ans2human
  • 所以我看到你得到了所需的数据!什么不工作?数据框构建?
  • 你能创建一个新问题来将此数据转换为数据框然后转换为 excel 吗?
猜你喜欢
  • 1970-01-01
  • 2021-10-15
  • 2015-03-06
  • 1970-01-01
  • 2020-10-09
  • 2019-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多