頁面翻頁,下一頁可能是一個新的url
也有可能是用js進行頁面跳轉,url不變,解決方法是實現瀏覽器模擬人工翻頁
目標:爬取同一個url下不同頁的數據(上述第二種情況)
url:http://www.gx211.com/collegemanage/search.aspx?id=1&xxcity=1
中國高校之窗,我要爬取北京市所有的學校列表,共有四頁數據,四頁都是同一個url。
部分頁面如圖:
找到“下一頁”按鈕的源碼,確認是用js進行的跳轉。
工具:
- selenium
- pyquery
- 火狐瀏覽器
代碼:
from selenium import webdriver from selenium.webdriver.support.wait import WebDriverWait from pyquery import PyQuery as pq # # 爬取北京市所有的學校 # browser = webdriver.Firefox() # 創建一個瀏覽器對象,這里還可以使用chrome等瀏覽器 try: BJuniv = [] browser.get('http://www.gx211.com/collegemanage/search.aspx?id=1&xxcity=1') # 獲取並打開url for r in range(4): html = browser.page_source # 獲取html頁面 doc = pq(html) # 解析html table = doc('.content tbody') # 定位到表格 table.find('script').remove() # 除去script標簽 list_cont = table('tr').items() # 獲取tr標簽列表 for i in list_cont: univ = (i.text()).split() # 獲取每個tr標簽中的文本信息,返回一個列表 print(univ) BJuniv.append(univ) nextpagebutton = browser.find_element_by_xpath('//*[@id="Lk_Down"]') # 定位到“下一頁”按鈕 nextpagebutton.click() # 模擬點擊下一頁 wait = WebDriverWait(browser, 10) # 瀏覽器等待10s finally: browser.close() # 關閉瀏覽器 with open("北京市所有大學.txt", "wt", encoding='utf8') as out_file: # 存儲為txt格式 out_file.write('全國各省學校名單:\n\n') for u in BJuniv: out_file.write(str(u) + '\n')
運行過程:自動打開瀏覽器,輸入url,獲取頁面,點擊下一頁,重復直到循環結束。(過程看不到很細致的,跳轉比較快)
運行結果(部分):