繁体   English   中英

如何在没有更新 URL 的动态表中读取 Pandas 中的 HTML?

[英]How do you read HTML in Pandas with a dynamic table with no updating URL?

我正在从https://www.wowprogress.com/获取数据并使用 Pandas 来完成它。 我将 HTML 读入数据框,并计算页面上的表格。 我想要的表是第一个索引从 1 到 20 的表,依此类推。

问题是页面上有一个“下一步”按钮,您可以按下它……但 URL 根本没有改变。

我在下面使用的代码:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from unicodedata import normalize

table_wow = pd.read_html('https://www.wowprogress.com/')
print (table_wow)

这显示了我最后页面上的第一个表格。 但我无法弄清楚如何模拟按下下一个按钮并通过我想要的任何页面获取第 2 页上的其余数据。

关于如何做到这一点的任何提示,或者我可能缺少什么?

检查网络活动时,您可以看到下一页是从https://www.wowprogress.com/pve/rating/next/0/rating/加载的, /next/后面的整数随着页码的增加而增加。 所以你可以循环浏览后续页面:

import pandas as pd
import time

table_wow = pd.read_html('https://www.wowprogress.com/')[1]

max_page = 10

for i in range(0,max_page):
    table = pd.read_html(f'https://www.wowprogress.com/pve/rating/next/{i}/rating/')[1]
    table_wow = table_wow.append(table, ignore_index=True)
    time.sleep(1.5)

这是从 api url 进行分页的工作示例,如下所示:

import requests
import pandas as pd

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36'}

api_url = ['https://www.wowprogress.com/pve/rating/next/'+str(x)+'/rating' for x in range(1,5)]

for url in api_url:
    req = requests.get(url,headers=headers)

    wiki_table = pd.read_html(req.text, attrs = {"class":"rating"} )

    df = wiki_table[0]#.to_csv('score.csv',index = False)

    print(df)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM