从具有多个页面结果的网站进行网页抓取

时间:2019-04-14 17:18:52

标签: python pandas web-scraping

我希望从一个返回多页结果的网站中选择所有网页的结果表。

我尝试了以下代码: enter code here

    import pandas as pd
    dfs = []
    while i<27:
        url = " "
        dframe = pd.read_html(url.str(i), header=1)
        dfs.append(dframe[0].dropna(thresh=3))
        i=i+1

我希望dframe保存所有30页结果的记录。 但是我无法运行它,即使经过数小时的运行,它也永远不会停止运行

2 个答案:

答案 0 :(得分:0)

import pandas as pd
import numpy as np

df2 = pd.DataFrame()
for i in np.arange(26):
    url = "http://stats.espncricinfo.com/ci/engine/stats/index.html?class=2;page="+str(i)+";spanmin1=01+Jan+2007;spanval1=span;template=results;type=bowling"
    df = pd.read_html(url)[2]
    df2 = pd.concat([df2, df])
df2.drop(columns = 'Unnamed: 14', inplace = True)

这对我有用。当我浏览该网站时,我只有26页。我还研究了一个页面,您所查看的表是read_html返回的列表上的[2] df。未命名:14是最右边带有箭头的列。

答案 1 :(得分:0)

我已经从您的原始代码中添加并更改了一些内容,以使其正常工作。

import pandas as pd

dfs = []

i = 0
while i < 26:
    url = (
        "http://stats.espncricinfo.com/ci/engine/stats/index.html?class=2;page="
        + str(i)
        + ";spanmin1=01+Jan+2007;spanval1=span;template=results;type=bowling"
    )
    dframe = pd.read_html(url, attrs={"class": "engineTable"})
    dfs.append(dframe[2].drop(columns="Unnamed: 14"))
    i = i + 1

result = pd.concat(dfs)

print(result)