昨日内容回顾
- 爬取天气数据
网页的信息可能是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表格
"""