我有以下可以正常工作的代码:
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。有没有一种方法可以定义最后一页,所以我不必去检查给定页面上有多少页?
答案 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)
。
答案 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
}
};