遇到的问题 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
最后获得数据