好久没写爬虫了 ,昨天有个学姐说须要爬取水质的一些数据,给了个网站( 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("爬虫结束")
执行几分钟后,就能够得到结果