Day6_爬虫流程整理
excel写操作
- 获取工作簿对象(工作簿对应的就是一个excel文件)
- 新建或者打开一个
import openpyxl
work_book = openpyxl.Workbook()
work_book = openpyxl.load_workbook('./file/student.xlsx')
- 获取所有表的表名
all_names = work_book.sheetnames
- 获取表对象
sheet = work_book[all_names[0]]
- 新建表
- 工作簿对象.create_sheet(表名,表的下标) - 下标可省略,表示放在最后
work_book.create_sheet('出师表')
- 删除表
- 工作簿对象…remove(表对象)
work_book.remove(work_book['出师表2'])
- 表重命名
sheet = work_book['出师表']
sheet = work_book.active
sheet.title = 'Student'
- 写入数据到单元格
-
单元格对象.value - 获取单元格的值
-
单元格对象.value = 值 - 修改单元格的值
- 获取单元格方法一
- 工作表对象.cell(行号,列号)
- 获取单元格方法二
- 工作表对象[‘字母+数字’] - 字母表示列数,数字表示行数
-
单元格对象.value = ’ ’ - 清空单元格
- 保存文件
- work_book.save(’./file/student.xlsx’)
excel读操作
- 打开文件
import openpyxl
wb = openpyxl.load_workbook('file/student.xlsx')
- 获取工作表
sheet = wb['出师表']
sheet = wb.active
- 获取单元格
-
获取单个单元格
sheet.cell(行号,列号) - 行号和列号都是从1开始的数字
sheet[位置信息] - 位置信息是类似:‘A1’,'B2’的行列信息,其中数字是行信息,字母是列信息.
-
以行为单位获取单元格数据
工作表.iter_rows(最小行号,最大行号,最小列号,最大列号) - 返回的是一个迭代器
# 第一行到第四行,从第一列到第四列,以行的数据作为一个列表为列表中的一个元素
cells = sheet.iter_rows(1, 4, 1, 4)
print(list(cells))
# 第四行,有数据的列返回一个数据
row_4 = sheet.iter_rows(4, 4)
print(list(row_4))
- 以列为单位获取单元格对象
cells = sheet.iter_cols(1, 4, 1, 4)
print(list(cells))
- 遍历单元格
all_scores = sheet.iter_cols(4, 4, 2, 4)
for score_cell in next(all_scores):
print(score_cell.value)
selenium设置选项
- 创建设置选项
from selenium import webdriver
from selenium.webdriver import ChromeOptions
options = webdriver.ChromeOptions()
- 添加选项参数
- 取消测试环境
options.add_experimental_option('excludeSwitches', ['enable-automation'])
- 取消图片加载(提高爬虫效率)
options.add_experimental_option("prefs", {"profile.managed_default_content_settings.images": 2})
b = webdriver.Chrome(options=options)
b.get(url)
print(b.page_source)
frame切换
url = 'https://mail.163.com/'
b = webdriver.Chrome()
b.get(url)
"""
有时候会遇到这样的网页:一个网页对应的html标签嵌套了其他的html标签
(前端如要要实现嵌套功能,必须要将被嵌套的html放在iframe标签中),
如果需要爬取网页内容在嵌套的html里面,需要先让浏览器中选中内容嵌套的html.
(浏览器对象默认选中的是最外面的html标签)
"""
- 获取提供html标签的iframe标签
box = b.find_element_by_css_selector('#loginDiv>iframe')
- 切换frame
b.switch_to.frame(box)
print(b.page_source)
多线程技术
-
一个进程默认有一个线程,这个线程叫主线程,其他的线程需要创建,且叫子线程
-
如果一个Python程序需要子线程需要手动创建线程类Thread的对象
-
Thread类 - 线程类 Thread类的对象 - 子线程
from threading import Thread
# 1.创建线程对象
# 线程对象 = Thread(target=函数,args=(参数))
# 2.启动线程
# 线程对象.start()