赞
踩
遇到的问题 Selenium需要安装geckodriver
- from selenium import webdriver
- from selenium.webdriver.common.by import By
- from time import sleep
- from selenium.webdriver.support.ui import Select
- import openpyxl as op
- import selenium
这里注释content的原因是driver.back() 并没有回到上一页(未解决),而是回到了起始页,由于url不变可能是后退过程中丢失了缓存值,因此二次爬取页面内容时,是进入网址内爬取的。
- # 打开指定(Firefox)浏览器
- driver = webdriver.Firefox()
- # 获得指定页面
- driver.get("..")
- wb = op.Workbook() # 创建工作簿对象
- ws = wb['Sheet'] # 创建子表
- ws.append(['标题','日期','网址','内容']) # 添加表头
- # 页面循环 需要循环点击下一页
- page=1
- def getData():
- time.sleep(2)
- for i in range(1,11):
- # 通过 xpath找到title_list 这里的list 需要text
- title = driver.find_element(By.XPATH, '/html/body/div[5]/div/div/div[1]/div['+str(i)+']/a').text
- # 获得日期
- date = driver.find_element(By.XPATH, '/html/body/div[5]/div/div/div[1]/div['+str(i)+']/span').text
- # 获得网址 网址在href属性值里
- url = url = driver.find_element(By.XPATH, '/html/body/div[5]/div/div/div[1]/div['+str(i)+']/a').get_attribute("href")
- # # 找到内容按钮
- # content_button = driver.find_element(By.XPATH,'/html/body/div[5]/div/div/div[1]/div['+str(i)+']/a')
- # # 进行点击操作
- # content_button.click()
- # content_list = driver.find_elements_by_class_name('MsoNormal')
- # # 将content数据text写入到content里
- # content = ""
- # for j in range(len(content_list)):
- # content = content+content_list[j].text
- # 将 title date url content写入到excel中 一行一行写
- row = title,date,url
- # ,content
- ws.append(row)
- wb.save('notice.xlsx')
-
- while page<= 180: # 循环页数
- getData()
- # /html/body/div[5]/div/div/div[2]/div/a[8]
- driver.find_element(By.XPATH,'//a[@class="layui-laypage-next"]').click()
- page += 1
关于driver.back() 爬取第一页时,进入内容 再driver.back(),会回到第一页(左)上。
但爬取第二页时,进入内容再driver.back(),并不会回到第二页 而是直接跳转到第一页 可能是缓存的数据丢失。
driver.back()
因此获取公告的内容是二次进行读取的
- data = pd.read_excel('notice.xlsx')
- driver = webdriver.Firefox()
- for i in range(0,data.shape[0]):
- # 发现页面在sleep(5)时不会出现加载缓慢的情况
- time.sleep(5)
- driver.get(data.loc[i,'网址'])
- content_list = driver.find_elements_by_class_name('content2')
- # 将content数据text写入到content里
- content = ""
- for j in range(len(content_list)):
- content = content+content_list[j].text
- data.loc[i,'内容'] = content
最后获得数据
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。