代码之家  ›  专栏  ›  技术社区  ›  AK88

在一个网站的页面上遍历一个表:如何定义最后一个页面?

  •  1
  • AK88  · 技术社区  · 7 年前

    我有以下代码可以正常工作:

    import requests
    from bs4 import BeautifulSoup
    import pandas as pd
    
    df_list = []
    for i in range(1, 13):
        url = 'https://www.uzse.uz/trade_results?date=25.01.2019&mkt_id=ALL&page=%d' %i
        df_list.append(pd.read_html(url)[0])
    
    df = pd.concat(df_list)
    df
    

    但是对于这一页,我知道它的页数是13页 range(1, 13) . 有没有办法定义最后一页,这样我就不必去检查给定页面上有多少页?

    3 回复  |  直到 7 年前
        1
  •  2
  •   BENY    7 年前

    试一试

    for i in range(1, 100):
    
        url = 'https://www.uzse.uz/trade_results?date=25.01.2019&mkt_id=ALL&page=%d' %i
        if pd.read_html(url)[0].empty:
            break
        else :
            df_list.append(pd.read_html(url)[0])
    

    page=0                    # using while
    while page > 0:
       url = 'https://www.uzse.uz/trade_results?date=25.01.2019&mkt_id=ALL&page=%d' % i
       df_list.append(pd.read_html(url)[0])
       page = page + 1
       if pd.read_html(url)[0].empty:
          break
    
    print(page)
    
        2
  •  1
  •   J_H    7 年前

    range(1, 13) .

    https://en.wikipedia.org/wiki/Off-by-one_error ).放一个 print(i) 在循环中,您将看到它从1计数到12。

    您可能会更高兴:

    for i in range(13):
    

    然后使用表达式 ... % (i + 1)

    查阅 https://docs.python.org/3/library/stdtypes.html#range

        3
  •  1
  •   abdullah.cu    7 年前

    对于这个特定的网站,您可以从分页栏检测页面数。您可以使用类似于以下代码段的内容:

    from bs4 import BeautifulSoup
    import requests
    r = requests.get('https://www.uzse.uz/trade_results?date=25.01.2019&mkt_id=ALL')
    soup = BeautifulSoup(r.text, 'html.parser')
    lastpage_url = soup.find("li", {"class": "last next"}).findChildren("a")[0]['href']
    num_pages = int(lastpage_url[lastpage_url.rfind("=")+1:])