Selenium 爬取全国水质周报Word

很久没写爬虫了 ,昨天有个学姐说需要爬取水质的一些数据,给了个网站( http://xxfb.hydroinfo.gov.cn/ssIndex.html?type=2&tdsourcetag=s_pctim_aiomsg ),不过 那个网站 出问题了 ,无法加载数据,,,,   .不过 爬虫的库都安装了 总不能 啥都不写 ,所以就从另一个网站爬取一些水质周报. 

爬虫主要用的库 有:Selenium 

一  安装Selenium

 Selenium是一系列基于Web的自动化工具,提供一套测试函数,用于支持Web自动化测试。函数非常灵活,能够完成界面元素定位、窗口跳转、结果比较。爬虫过程,需要模拟鼠标点击,快速定位元素,利用 Selenium 可以非常方便的完成. 在控制台中输入 pip install selenium 进行安装.

 

二分析页面 

 爬虫最重要的一步是分析 页面内容. 本次爬虫网站为http://www.cnemc.cn/csszzb2093030.jhtml  ,观察网站,主界面有一个ul,ul的id 为:contentPageData , 每个ul的li 都有a标签

点击a某个a标签后 ,打开新网页,网页中间就是我们需要下载的内容,单击页面的a标签就可以下载文件。

 

整个 操作非常少 。所以爬虫非常容易 。 主要步骤是:

1 进入主页面 http://www.cnemc.cn/csszzb2093030.jhtml,在输入框输入需要爬取的某一页。,点击跳转即到需要爬取的一页

2 获取该页面所有符合要求的a标签

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("爬虫结束")

  执行几分钟后,就可以获得结果

 

转载于:https://www.cnblogs.com/hlx-blogs/p/9782588.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值