【问题标题】:Scrape a table iterating over pages of a website: how to define the last page?抓取一个遍历网站页面的表格:如何定义最后一页?
【发布时间】:2019-06-20 22:31:51
【问题描述】:

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

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

但是对于这个特定的页面,我知道页数,在range(1, 13) 中是 13。有没有办法定义最后一页,所以我不必去检查给定页面上有多少页?

【问题讨论】:

  • 使用 try 除了 break
  • 您能详细说明一下吗?因为当page=14 没有报错。我只是得到一张空桌子。
  • 添加让我知道它是否适合你

标签: python python-3.x pandas for-loop web-scraping


【解决方案1】:

对于这个特定的网站,您可以从分页栏检测页面数。可以使用类似下面代码sn-p的东西:

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:])

【讨论】:

  • 非常有趣,会试一试。谢谢!
  • 我很高兴它有帮助!
【解决方案2】:

我知道页数,也就是range(1, 13)中的13页。

您似乎患有 OBOB (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】:

    试试

    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-03
      • 1970-01-01
      相关资源
      最近更新 更多