Scrapy接入selenium、Python操作Excel

本文介绍了如何在Scrapy框架中集成Selenium进行更复杂的网页抓取,包括创建配置文件和中间件。接着,内容转向Python自动化办公,如操作Excel(xlrd、xlwt和openpyxl模块)、PDF、Word文档、自动发邮件以及RPA(机器人流程自动化)工具的使用。
摘要由CSDN通过智能技术生成

十四周内容笔记

day40

scrapy接入selenium

在大目录下创建配置文件

在这里插入图片描述

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager

class SeleniumToScrapySetting:
    driver_path = './'
    s = Service(executable_path=ChromeDriverManager(path=driver_path).install())

    def creat_chrome(self):
        # 引入配置项
        Options = webdriver.ChromeOptions()
        # 无头浏览器
        # 要不要使用无头浏览器,看情况(页面复杂程度)
        # 如果不适用无头,需要降低scrapy的线程数
        Options.add_argument('--headless')
        browser = webdriver.Chrome(service=self.s, options=Options)
        # 将浏览器对象返回
        return browser

在中间件中添加类

在这里插入图片描述

# 要让selenium介入scrapy,需要从下载中间件入手,结果scrapy的request请求
# 导入utils中的SeleniumToScrapySetting类
from utils import SeleniumToScrapySetting
from scrapy.http import HtmlResponse

class SeleniumDownloaderMiddleware:
    def __init__(self):
        # OJ:object
        # 实例化selenium创建的浏览器对象
        ChromeOJ = SeleniumToScrapySetting()
        self.browser_ = ChromeOJ.creat_chrome()

    def closeSpider(self):
        # 自定义关闭浏览器的方法,等scrapy结束以后进行调用,关闭创建的浏览器对象
        self.browser_.quit()

    def process_request(self, request, spider):
        """链接访问前的请求配置"""
        # request:表示请求,其中已经包含了将要请求的信息
        self.browser_.get(url=request.url)
        # HtmlResponse方法负责将构造好的response对象返回给引擎,再通过爬虫中间件将其发送给爬虫进行处理。
        # HtmlResponse即负责网页相应结果的构造,又负责返回响应结果
        return HtmlResponse(url=request.url, body=self.browser_.page_source, request=request, encoding='utf-8')

    def process_response(self, request, response):
        """拿到的响应结果做处理的位置"""
        return response

    def process_exception(self, request, exception):
        """如果请求、相应结果报错,使用此方法进行异常处理"""
        pass

在设置中“告知“scrapy

在这里插入图片描述

告知.png

DOWNLOADER_MIDDLEWARES = {
   # "ChinaNews.middlewares.ChinanewsDownloaderMiddleware": 543,
   # "ChinaNews.middlewares.ChinanewsUserAgentDownloaderMiddleware": 100,
   "ChinaNews.middlewares.SeleniumDownloaderMiddleware": 50,
}

day42

到此为止,网课的python基础和爬虫就结束了,开始自动化办公了,主要是以下内容

1.python操作Excel

2.python操作pdf

3.python操作word文档

4.python自动发邮件

5.python破解密码

6.RPA(机器人流程自动化)工具

01-python写入Excel

1.Excel后缀名

Excel2007以前,Excel文件的后缀名为xls,Excel2007以后,后缀名为xlsx,xls的文件单表最大保存(65536行,256列),xlsx的文件最大保存(1048576行,16384列),xlsx文件与xls文件保存同样的数据,文件更小了,运行速度更快了。

2.xls读写使用xlrd、xlwt模块,xlsx文件读写使用openpyxl模块。

3.新版的Excel向前兼容,还可以打开后缀名为xls的文件。

先讲xls的读写

import xlwt
# 第一步:如果本地没有Excel文件存在,先创建
# Workbook():一个Excel文件学名:工作簿(workbook)
wb = xlwt.Workbook()
# 补充:如果文件已经存在,也可以给workbook方法指定打开哪个文件
# xlwt.workbook('小学成绩表.xls')

# 第二步:从工作簿中创建工作表(worksheet)
# add_sheet()
wb.add_sheet('一年级一班')
ws = wb.add_sheet('一年级二班')
# 补充:xlwt没办法删除无用的工作表

# 第三步:向工作表内的单元格(cell)中写入数据
# xlwt给定下标(行列号)从0开始
# write方法:write(行号, 列号, 内容)
title = ('姓名', '数学', '语文', '英语')
for i in range(len(title)):
    ws.write(0, i, title[i])
# 补充:xlwt模块是没有办法指定一个非自己创建的工作表的,没有办法指定xlwt向任意一张已存在的表写入数据。

# 第四步:保存文件
wb.save('小学成绩表.xls')
# 补充:文件不存在叫保存,文件原本就存在,叫做覆盖

02-python读Excel

import xlrd

# 第一步:读取一个已经存在的文件
# open_workbook()
wb = xlrd.open_workbook('小学成绩表.xls')

# 第二步:查看已存在的所有工作表
# sheet_names()
print(wb.sheet_names())

# 第三步:指定某张工作表
# wb.sheet_by_name():通过名字指定
# wb.sheet_by_index():通过下标指定
ws_1 = wb.sheet_by_name('一年级二班')
print(ws_1)
# 返回:Sheet  1:<一年级二班>
ws_2 = wb.sheet_by_index(0)
print(ws_2)
# 返回:Sheet  0:<一年级一班>

# 第四步:查看表中的最大行列数
max_row = ws_1.nrows
max_col = ws_1.ncols
print(f'最大行列数为{max_row}{max_col}列')

# 第五步:获取单元格中的数据
# cell(行号, 列号)
a1 = ws_1.cell(0, 0)
print(a1, type(a1))
# 返回:text:'姓名' <class 'xlrd.sheet.Cell'>
# 使用value查看指定单元格类(对象)中的内容
print(a1.value)
# 返回:姓名

# 尝试将“一年级二班”工作表中的所有内容拿出来
# 自己写的
for i in range(ws_1.ncols):
    print(ws_1.cell(0, i).value, end=' ')
# 老师写的
for i in range(max_row):
    for j in range(max_col):
        print(ws_1.cell(i, j).value, end='\t')
    print()

03-xlrd和xlwt组合使用

问题:在已知的一年级二班原有数据的基础上添加新的数据,添加四位学生及其各自的三科成绩。

import xlrd
import xlwt

# 第一步:先读取出原有数据占位
wb_rd = xlrd.open_workbook('小学成绩表.xls')
ws_rd = wb_rd.sheet_by_name('一年级二班')
max_row, max_col = ws_rd.nrows, ws_rd.ncols
print(max_row, max_col)
# 返回:1 4

# 第二步:创建一个新的工作簿,写入原有内容,再写入新内容
wb_wt = xlwt.Workbook()
ws_wt = wb_wt.add_sheet('一年级二班')    # type:xlwt.Worksheet
for i in range(max_row):
    for j in range(max_col):
        ws_wt.write(i, j, ws_rd.cell(i, j).value)

# 添加四位学生的信息
names = ['a', 'b', 'c', 'd']
for i in range(max_row, max_row + len(names)):
    ws_wt.write(i, 0, names[i-1])
    for j in range(1, 4):
        import random
        ws_wt.write(i, j, random.randint(0, 100))

wb_wt.save('小学成绩表.xls')

注意:xlwt补充的那些内容因为xlwt的性质,不得不使用xlwt和xlrd互补形式,以创建来代替修改的形式,对元数据进行迁移、修改。
此程序只能执行一次,不能执行多次。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老树盘根_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值