刮擦遍历网站页面的表格:如何定义最后一页?

时间:2019-01-27 21:54:26

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

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

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。有没有一种方法可以定义最后一页,所以我不必去检查给定页面上有多少页?

3 个答案:

答案 0 :(得分:2)

尝试

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)

答案 1 :(得分:1)

  

我知道页数,在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)

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

答案 2 :(得分:1)

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



    import {Injectable} from '@angular/core';
    import {FirebaseAnalytics} from "@ionic-native/firebase-analytics/ngx";


        @Injectable()
        export class AnService{

          constructor(private fb:FirebaseAnalytics){}

          testAnalytics(){
            console.log(JSON.stringify(this.fb,null,2)); // logs empty object{}
            this.fb.logEvent('page_view', {page: "dashboard"}); 
            // returns an error: object is not a function
          }

        };