昨日内容回顾

  • 爬取天气数据
网页的信息可能是js代码动态加载获取的
学会使用浏览器查找内部网络请求
  • 爬取汽车之家
  • selenium模块
通过python代码控制浏览器完成一系列操作

模块下载
	pip3 install selenium
# 驱动下载(条件)
	将下载的驱动.exe文件放入python解释器的scripts文件夹内即可
  • 查找标签
  • 属性操作
获取文本
	.text
获取属性
	.get_attribute()

今日内容概要

  • selenium模块补充
滑动验证(了解)
  • cookie数据
  • 使用selenium爬取京东数据
  • opempyxl模块
控制表格
  • openpyxl生成表格数据
  • 写数据
  • 读数据

今日内容详细

selenium模块补充

滑动验证解决方法
	1.使用代码破解,但是很复杂不推荐
    2.直接手动滑动验证(比较推荐)

cookie数据

查看
# requests.cookies
获取
# driver.get_cookies()

使用selenuim尝试爬取京东商品数据

'''
在页面的数据中有一些数据会出现懒加载现象
	既是如果没有阅读到就不会加载出来,如图片等较大的数据
	查看爬取数据后需要对其进行处理
	img标签 有懒加载那么它的src和data-lazy-img
		   不加载的时候存在data-lazy-img
		   加载完成之后存在src
img = li.find_element_by_css_selector('.p-img a img').get_attribute('src')
    if not img:
        img_url = 'https:' + li.find_element_by_css_selector('.p-img a img').get_attribute('data-lazy-img')
        print(img_url)
    else:
        print(img)
'''
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome()
driver.get('https://www.jd.com/')
driver.implicitly_wait(10)  # 使用隐式等待

# 查看输入框
input_ele = driver.find_element_by_id('key')
# 输入需要爬取的商品数据  这里可以使用输入框获取用户需要爬取的商品
input_ele.send_keys('手机')
# 按enter进入商品界面
input_ele.send_keys(Keys.ENTER)

li_list = driver.find_elements_by_css_selector('.gl-item')
for li in li_list:
    a = li.find_element_by_css_selector('.p-img a')
    if a:
        print(a.get_attribute('href'))
    img_url = li.find_element_by_css_selector('.p-img a img').get_attribute('src')
    if not img_url:
        img_url = 'https:' + li.find_element_by_css_selector('.p-img a img').get_attribute('data-lazy-img')

    i = li.find_element_by_css_selector('.p-price i')

    em = li.find_element_by_css_selector('.p-name a em')

    comment = li.find_element_by_css_selector('.p-commit a')
    print("""
    商品链接:%s
    商品图片:%s
    商品简介:%s
    商品价格:%s
    商品销量:%s
    """ % (a.text, img_url, i.text, em.text, comment.text))
"""
如何做到:
	商品自定义
	分页爬取
"""

openpyxl模块

python中操作表格的模块 需知:
'''
1.excel版本
	03版本之前
		文件后缀名是.xls
	03版本之后
		文件后缀名是.xlsx

2.能够操作Excel表格的模块
	openpyxl(学这个)
	xlrd,xlwt
		wlrd控制表格读取
		xwlt控制表格写入
	oenpyxl模块针对03版本男之间的表格文件兼容性较差
	xlrd,xlwt兼容所有的文件
	但是openpyxl是最近出来的比较火的操作Excel表格的模块,功能更加强大
'''
pip3 install openpyxl

openpyxl生成表格文件

form openpyxl import workbook

wb = workbook()

# 创建工作簿
w1 = wb.create_sheet('我的找工作簿1'index=o) #index表示工作部位置
w1 = wb.create_sheet('我的找工作簿2')
w1 = wb.create_sheet('我的找工作簿3')

# 修改工作蒲名称
w1.title='mysheet01'

wb.save(r'aaa.xlsx')

写数据

# 写数据
# 方式1
# w1['A1'] = 123
# w2['B6'] = 666
# w3['D9'] = 999
# 方式2
# w1.cell(row=2, column=1, value=666)

# 写公式(公式前面的等号不能省略!)
# w1['A5'] = '=sum(A1:A2)'


# 一次性写入多个单元格数据
# 方式1
# w1['A1'] = '序号'
# w1['B1'] = '姓名'
# w1['C1'] = '年龄'
# w1['D1'] = '性别'
# for i in range(2,10):
#     w1['A%s'%i] = i - 1
#     w1['B%s'%i] = 'jason%s'%i
#     w1['C%s'%i] = i
#     w1['D%s'%i] = 'male'
# 方式2
# 写字段
w1.append(['id', 'name', 'age', 'gender', 'hobby'])
# 写数据
w1.append([1, 'jason', 18, 'male', 'read'])
w1.append([2, 'tony', 28, 'female', 'game'])
w1.append([3, 'kevin', 38, 'male', 'music'])

w1.append([1, 'alisa', 18, 'female'])
w1.append([5, 'male', 99, 'run'])
"""在填写数据的时候一定要确保位数一致,如果有缺失数据用空字符代替不要直接不写"""
wb.save(r'aaa.xlsx')

读数据

from openpyxl import load_workbook

wb = load_workbook(r'aaa.xlsx',data_only=True)
# 查看所有的工作簿名称
# print(wb.sheetnames)  # ['MySheet01', 'Sheet']
# 选择需要读取数据的工作簿
w1 = wb['MySheet01']  # 操作MySheet01工作簿

# 方式1
# print(w1['B2'])  # <Cell 'MySheet01'.B2>
# print(w1['B2'].value)  # jason
# 方式2
# print(w1.cell(row=2,column=3))  # <Cell 'MySheet01'.C2>
# print(w1.cell(row=2,column=3).value)  # 18

'''默认只能获取到公式'''
# 读取公式栏目数据
print(w1['A7'].value)  # =sum(A1:A3)
"""
要想读取公式计算之后的结果需要做下面两步操作
1.必须加一个参数
    data_only=True
    wb = load_workbook(r'aaa.xlsx',data_only=True)
2.必须人为操作一下excel表格
"""