通過上一篇博客了解到爬取數據的操作,但對於存在多個頁面的網址來說,使用上一篇博客中的代碼爬取下來的資料並不完整。接下來就是講解該如何爬取之后的頁面信息。
一、審查元素
鼠標移至頁碼處右鍵,選擇檢查元素
接着屏幕下方就會出現對應的html語句
二、分析html語句與項目要求
本次項目是爬取所有信息,根據第一步中的html語句,我們有兩種爬取后續頁面信息的方法:
方法一:循環訪問本頁面中的“下一頁”鏈接直至該標簽為空
即
def next_page(url): soup=get_requests(url) draw_base_list(soup) pcxt=soup.find('div',{'class':'babynames-term-articles'}).find('nav') pcxt1=pcxt.find('div',{'class':'nav-links'}).find('a',{'class':'next page-numbers'}) if pcxt1!=None: link=pcxt1.get('href') next_page(link) else: print("爬取完成")
方法二:獲取總頁數,通過更改url來爬取后續信息
通過html語句可以看出不同頁數的url只有最后的數字不一樣,而最后的數字就代表着這個url中的信息是第幾頁的信息。
頁面中的html語句給出了總頁碼,我們只需要定位至該標簽並獲得總頁數即可。
即
def get_page_size(soup): pcxt=soup.find('div',{'class':'babynames-term-articles'}).find('nav') pcxt1=pcxt.find('div',{'class':'nav-links'}).findAll('a') for i in pcxt1[:-1]: link=i.get('href') s=str(i) page=re.sub('<a class="page-numbers" href="','',s) page1=re.sub(link,'',page) page2=re.sub('">','',page1) page3=re.sub('</a>','',page2) pagesize=int(page3) print(pagesize) return pagesize pass
獲得總頁數后這個模塊還沒有結束,我們還需要更改url來訪問網址,也就是主函數的編寫:
if __name__ == '__main__': url="http://www.sheknows.com/baby-names/browse/a/" soup=get_requests(url) page=get_page_size(soup) for i in range(1,page+1): url1=url+"page/"+str(i)+"/" soup1=get_requests(url1) draw_base_list(soup1)
通過以上的兩種方法就可以將多個頁面中的信息都爬取下來了,趕緊動手試試吧。