Selenium 爬取全國水質週報Word

好久沒寫爬蟲了 ,昨天有個學姐說須要爬取水質的一些數據,給了個網站( http://xxfb.hydroinfo.gov.cn/ssIndex.html?type=2&tdsourcetag=s_pctim_aiomsg ),不過 那個網站 出問題了 ,沒法加載數據,,,,   .不過 爬蟲的庫都安裝了 總不能 啥都不寫 ,因此就從另外一個網站爬取一些水質週報. css

爬蟲主要用的庫 有:Selenium html

一  安裝Selenium

 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("爬蟲結束")

  執行幾分鐘後,就能夠得到結果

相關文章
相關標籤/搜索