我陷入了一個奇怪的分頁案例。我刮從搜尋結果https://cotthosting.com/NYRocklandExternal/LandRecords/protected/SrchQuickName.aspx用硒導航分頁
我有搜索結果分爲4類。
1)沒有對搜索結果
2)有一個結果
頁3)有多於一個的搜索結果頁,但小於12個結果網頁
4)有更超過12個結果頁面。
對於情況1,這很容易,我只是通過。
results = driver.find_element_by_class_name('GridView')
if len(results)== 0:
pass
對於情況2和3,我檢查包含元素中的鏈接列表是否至少有一個,然後單擊它。
else:
results_table = bsObj.find('table', {'class':'GridView'})
sub_tables = results_table.find_all('table')
next_page_links = sub_tables[1].find_all('a')
if len(next_page_links) == 0
scrapeResults()
else:
scrapeResults()
####GO TO NEXT PAGE UNTIL THERE IS NO NEXT PAGE
對於案例2和案例3的疑問:我可以檢查這裏作爲我的控件嗎?
鏈接是hrefs到第2,3頁等等。但棘手的部分是,如果我在當前頁面上,比如說第1頁,我如何確保我進入第2頁,以及何時進入頁面2我如何確定我要去第3頁?對結果列表頁面1的HTML是與具體使用sub_tables[1]
見上文BS4代碼在殼體2
的問題是不存在下一按鈕如下
<table cellspacing="0" cellpadding="0" border="0" style="border-collapse:collapse;">
<tr>
<td>Page: <span>1</span></td>
<td><a href="javascript:__doPostBack('ctl00$cphMain$lrrgResults$cgvNamesDir','Page$2')">2</a></td>
<td><a href="javascript:__doPostBack('ctl00$cphMain$lrrgResults$cgvNamesDir','Page$3')">3</a></td>
</tr>
</table>
我可以零到這個表中,我可以利用。 html中的結果頁面沒有任何變化。除了鏈接前span
的編號之外,沒有什麼可以隔離當前頁面。而且我想它停止,當它到達最後一頁
情況4中,HTML看起來像這樣:
<table cellspacing="0" cellpadding="0" border="0" style="border-collapse:collapse;">
<tr>
<td>Page: <span>1</span></td>
<td><a href="javascript:__doPostBack('ctl00$cphMain$lrrgResults$cgvNamesDir','Page$2')">2</a></td>
<td><a href="javascript:__doPostBack('ctl00$cphMain$lrrgResults$cgvNamesDir','Page$3')">3</a></td>
<td><a href="javascript:__doPostBack('ctl00$cphMain$lrrgResults$cgvNamesDir','Page$4')">4</a></td>
<td><a href="javascript:__doPostBack('ctl00$cphMain$lrrgResults$cgvNamesDir','Page$5')">5</a></td>
<td><a href="javascript:__doPostBack('ctl00$cphMain$lrrgResults$cgvNamesDir','Page$6')">6</a></td>
<td><a href="javascript:__doPostBack('ctl00$cphMain$lrrgResults$cgvNamesDir','Page$7')">7</a></td>
<td><a href="javascript:__doPostBack('ctl00$cphMain$lrrgResults$cgvNamesDir','Page$8')">8</a></td>
<td><a href="javascript:__doPostBack('ctl00$cphMain$lrrgResults$cgvNamesDir','Page$9')">9</a></td>
<td><a href="javascript:__doPostBack('ctl00$cphMain$lrrgResults$cgvNamesDir','Page$10')">10</a></td>
<td><a href="javascript:__doPostBack('ctl00$cphMain$lrrgResults$cgvNamesDir','Page$11')">...</a></td>
<td><a href="javascript:__doPostBack('ctl00$cphMain$lrrgResults$cgvNamesDir','Page$Last')">Last</a></td>
</tr>
</table>
最後兩個環節都...
表明有更多的結果頁和Last
表示最後一頁。但是,每個頁面上都存在「最後一個鏈接」,並且它只在最後一頁上,它不是活動鏈接。
對於案例4的問題,我如何檢查last
鏈接是否可點擊並將其用作我的停留點?
對於案例4的更大問題,我該如何修改...
以查看其他結果頁?結果頁面列表最多爲12個值。即與當前頁面最近的10頁,鏈接到更多頁面的...
和鏈接Last
。所以如果我的結果有88頁,我不知道該怎麼辦。
我轉儲鏈接到一個完整的示例頁面:https://ghostbin.com/paste/nrb27所有的
您是否嘗試單擊最後一個鏈接?,也許您可以在此之後看到最後一個頁碼,並知道您有多少頁。此外,請檢查您是否可以在不點擊頁碼並僅使用網址的情況下進行導航。正如我看到Last是一個鏈接,所以你應該能夠點擊它=>你應該在最後一頁,並找到頁面的總數。 – lauda
@lauda,獲取頁數有兩個部分。如果多於1個結果頁面但少於12個,則沒有'Last',但是len(next_page_links)'會給我多少頁面。如果頁面超過12個,是的,我可以使用'next_page_links'中最後一個元素的第二個數字得到數字,因爲最後一個元素是'Last'。所以這個'next_page_links [-2] .get_text()'會返回數字。但是,在我進行搜索之前,我無法確定頁面是多於還是少於12.我可以搜索「......」的存在。遍歷所有鏈接是挑戰。例如15個結果頁面 –