#test.py
import requests
from selenium import webdriver
import time
from write import write
#首先打开浏览器
drive = webdriver.Chrome()
#设置隐式等待:等待元素找到,如果找到元素则马上继续执行语句,如果找不到元素,会在设定时间内不断请求寻找元素,当超过设定时间还未找到,则抛出异常
#这里设置等待5s
drive.implicitly_wait(5)
#将浏览器窗口最大化
drive.maximize_window()
#进入网址页面
drive.get('https://weibo.com/newlogin?tabtype=topic&gid=&openLoginLayer=0&url=https%3A%2F%2Fwww.weibo.com%2F')
#打开页面后页面将停留3秒
#time.sleep(3)
#通过css定位寻找元素,这里用class定位
#热搜话题标题
titles = drive.find_elements_by_css_selector(".HotTopic_tit_eS4fv")
#热搜话题内容
contents = drive.find_elements_by_css_selector(".HotTopic_wbtext_iNPG5")
#热搜话题阅读数量
reads = drive.find_elements_by_css_selector(".HotTopic_num_1H-j8>span:first-child")
#热搜话题讨论数量
discusss = drive.find_elements_by_css_selector(".HotTopic_num_1H-j8>span:last-child")
#获取titles的长度
length = len(titles)
#调用写入表格方法
write(1,length,titles)
write(2,length,contents)
write(3,length,reads)
write(4,length,discusss)
#关闭浏览器
drive.quit()
#write.py
from openpyxl import load_workbook,Workbook
def write(pt,length,data):
#设置异常处理,当try内的代码执行有误,将抛出except里的异常提示
try:
#加载已有表单
wb = load_workbook('./weibo.xlsx') # ./路径为同个文件夹下查找文件; ../为同个父级路径下查找文件
#找到表单里的第一个sheet
sh = wb.active
#行数循环,第一行是表头,因此从第二行开始,range()为左闭右开,range(0,8)即0开始,7结束
for i in range(2,length+2):
#将对应位置的单元格填充进数据
sh.cell(row=i,column=pt).value=data[i-2].text #text:获取元素的描述,即获取找到的元素中的 <p>天下第一<p> 天下第一
#保存文档
wb.save('./weibo.xlsx')
except Exception:
print("写入有误")
# def test():
#创建一个表单
# wb = Workbook()
# sh = wb.active
# title = ["标题","内容"]
#将表头的名称插入表单
#方法一
# # for i in range(1,3):
# # sh.cell(row=1,column=i).value = title[i-1]
#方法二
# sh.append(title)
# print("成功")
# wb.save("./test.xlsx")