好久沒寫爬蟲了 ,昨天有個學姐說須要爬取水質的一些數據,給了個網站( http://xxfb.hydroinfo.gov.cn/ssIndex.html?type=2&tdsourcetag=s_pctim_aiomsg ),不過 那個網站 出問題了 ,沒法加載數據,,,, .不過 爬蟲的庫都安裝了 總不能 啥都不寫 ,因此就從另外一個網站爬取一些水質週報. css
爬蟲主要用的庫 有:Selenium html
Selenium是一系列基於Web的自動化工具,提供一套測試函數,用於支持Web自動化測試。函數很是靈活,可以完成界面元素定位、窗口跳轉、結果比較。爬蟲過程,須要模擬鼠標點擊,快速定位元素,利用 Selenium 能夠很是方便的完成. 在控制檯中輸入 pip install selenium 進行安裝.python
爬蟲最重要的一步是分析 頁面內容. 本次爬蟲網站爲http://www.cnemc.cn/csszzb2093030.jhtml ,觀察網站,主界面有一個ul,ul的id 爲:contentPageData , 每一個ul的li 都有a標籤web
點擊a某個a標籤後 ,打開新網頁,網頁中間就是咱們須要下載的內容,單擊頁面的a標籤就能夠下載文件。chrome
整個 操做很是少 。因此爬蟲很是容易 。 主要步驟是:瀏覽器
1 進入主頁面 http://www.cnemc.cn/csszzb2093030.jhtml,在輸入框輸入須要爬取的某一頁。,點擊跳轉即到須要爬取的一頁app
2 獲取該頁面全部符合要求的a標籤ide
3 根據a標籤地址,進入下載頁 ,找到須要下載文件的a 標籤 最後實現點擊就能夠完成。函數
在以前 ,必須進行瀏覽器下載設置 。工具
options = webdriver.ChromeOptions() # 設置中文 options.add_argument('lang=zh_CN.UTF-8') options.add_argument('user-agent="Mozilla/5.0 (iPod; U; CPU iPhone OS 2_1 like Mac OS X; ja-jp) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/5F137 Safari/525.20"') prefs = {"download.default_directory": "地址"} options.add_experimental_option("prefs", prefs) driver = webdriver.Chrome(chrome_options=options)
爬蟲過程當中 ,須要注意 ,在進行頁面跳轉後,須要讓程序休息幾秒,確保瀏覽器已經完成跳轉。
#! /usr/bin/env python # -*- coding: utf-8 -*- # __author__ = "hlx" # Date: 2018/10/12 from selenium import webdriver import time import os # 進入瀏覽器設置 options = webdriver.ChromeOptions() # 設置中文 options.add_argument('lang=zh_CN.UTF-8') options.add_argument('user-agent="Mozilla/5.0 (iPod; U; CPU iPhone OS 2_1 like Mac OS X; ja-jp) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/5F137 Safari/525.20"') prefs = {"download.default_directory": "D:\\MyProgram\\Python\\Pycharm\\Worm\\"} options.add_experimental_option("prefs", prefs) driver = webdriver.Chrome(chrome_options=options) my_Log=[] def download_Data(url_list): ''' :param url_list:頁面url列表 :return:文檔下載url ''' for index in range(len(url_list)): url = url_list[index] driver.get(url) #獲取文件下載名稱 try: filename= driver.find_element_by_xpath("//div[@class='text']//p//a").text #點擊文件下載連接 driver.find_element_by_xpath("//div[@class='text']//p//a").click() #等待下載完成 print("正在下載"+filename) time.sleep(3) my_Log.append(filename+"下載完成") except: print("下載第"+str(index+1)+"失敗") my_Log.append(url + "下載失敗") #文件下載位置 #="D:\\MyProgram\\Python\\Pycharm\\Worm\\"+filename #flag=True #count=10 def WaterQuality_Spider(url,pageCount): ''' :param url: 網站url :param pageCount: 爬取的數目 :return: list url ''' list_url=[] for index in range(pageCount): driver.get('http://www.cnemc.cn/csszzb2093030.jhtml') #休息一下 否則跳轉不來 time.sleep(3) page=str(index) driver.find_element_by_id("pageNum").send_keys(page)#在頁碼處填寫頁碼 #name=driver.find_element_by_xpath("//span[@class='list_hand'][last()]") driver.find_element_by_xpath("//span[@class='list_hand'][last()]").click()#轉到該頁 # 休息一下 否則跳轉不來 time.sleep(2) list_a=driver.find_elements_by_xpath("//ul[@id='contentPageData']//a")#獲取結果連接 for thea in list_a: theurl = thea.get_attribute("href") list_url.append(theurl) download_Data(list_url) list_url = [] my_Log.append("第"+str(index+1)+"下載完成") f = open("log.txt", 'a') for index in range(len(my_Log)): f.write(my_Log[index] + "\n") my_Log=[] print("第"+str(index+1)+"下載完成") return "ok" if __name__=="__main__": count=input("輸入爬取的頁數: ") url='http://www.cnemc.cn/csszzb2093030.jhtml' print("啓動爬蟲") WaterQuality_Spider(url,int(count)) print("爬蟲結束")
執行幾分鐘後,就能夠得到結果