第九课
1.定时工具库
"""
直接在 C:\Software\Anaconda3\Lib 目录下 的都是原生库 使用的话直接导入即可
三方库
需要额外安装的 会被安装在 C:\Software\Anaconda3\Lib\site-packages
因为使用的Anaconda 所以在这个目录下有很多的库
定时工具库
pip python管理库工具
可以来进行安装 删除 更新
三方库来进行下载安装的时候
这个库工具存在 https://www.pypi.org
如果网络不好 请求网站的资源会比较慢一些的
一般我们来下载的时候 会把下载网站设置国内的
清华源
豆瓣
网易
阿里...
百度 搜 pip 国内镜像源
"""
import schedule
import datetime
def job():
print(datetime.datetime.now(), '金海把手机收起来!!!!!!!!')
return 1
schedule.every().seconds.do(job_func=job)
"""
函数名() ==== 调用函数
执行函数内容的代码逻辑 会把函数的运行结果返回
"""
def job_with_argument(name, age):
print(f"I am {name} age {age}")
schedule.every(10).seconds.do(job_with_argument, name="Peter", age=18)
while True:
schedule.run_pending()
2.定时发送邮件
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
connect = smtplib.SMTP_SSL('smtp.qq.com', 465)
connect.login('2301973297@qq.com', 'diugdbezslhbebdc')
sender = '2301973297@qq.com'
'''
收件人 不确定 一个人 可能多个人
主题 不确定
正文的内容 及其格式
'''
def send_email(receiver, subject, content, subtype):
"""
:param receiver: 收件人 可能是字符串类型 也可能是列表类型 【列表的时候 需要使用逗号拼接成字符串】
:param subject: 主题
:param content: 发送的内容
:param subtype: 内容类型 plain 纯文本 html超文本
"""
if type(receiver) not in (str, list):
raise TypeError(f'excepted str or list of strings, found {type(receiver).__name__}')
elif type(receiver) == list:
receiver = ','.join(receiver)
email = MIMEMultipart()
email['From'] = sender
email['To'] = receiver
email['Subject'] = subject
text = MIMEText(_text=content, _subtype=subtype)
email.attach(text)
connect.sendmail(from_addr=sender, to_addrs=receiver, msg=email.as_string())
print(receiver, '接收完成')
import schedule
schedule.every(10).seconds.do(send_email,
receiver='2301973297@qq.com',
subject='努力就会有回报',
content='努力熊熊',
subtype='plain'
)
while True:
schedule.run_pending()
3.数据采集
"""
数据分析流程:
1. 明确问题
2. 提取数据
数据库
Excel文件、csv文件
对接三方平台
数据采集【爬虫】
3. 数据清洗
4. 数据分析
5. 数据可视化 【柱形图 折线图 饼图】
数据采集【爬虫】
蜘蛛程序【Spider】
数据采集获取的都是服务器提供的
数据爬虫流程
1. 使用Python程序模拟浏览器发送请求 获取到网页数据 【使用的工具是selenium】
2. 在网页数据中提取想要的资源信息 【CSS选择器的方式定位数据】
3. 把数据存储到本地 【存储到数据库、存储Excel文件中】
selenium工具介绍
自动化测试工具,利用代码驱动打开浏览器,利用代码模拟人为操作
安装 pip install selenium
"""
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
browser = webdriver.Edge()
browser.get('https://movie.douban.com/top250')
time.sleep(5)
"""
by=By.ID, 定位方式 这些方式是被封装在工具库By类中
默认是按照标签的ID属性 进行定位的
By.CSS_SELECTOR 按照选择器进行定位
全局选择器
元素选择器
属性选择器
id选择器 类选择器
包含选择器
结构选择器
value 该方式对应的数据值
"""
title_eles = browser.find_elements(by=By.CSS_SELECTOR, value='.hd > a > span:first-child')
print(len(title_eles))
for ele in title_eles:
print(ele.text)
4.selenium模拟人为操作
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
browser =webdriver.Edge()
browser.get('https://movie.douban.com/top250')
time.sleep(2)
page = 1
while True:
movie_list=browser.find_elements(by=By.CSS_SELECTOR, value='.grid_view > li')
for i in range(1, len(movie_list) + 1):
movie_li = browser.find_element(by=By.CSS_SELECTOR, value=f'.grid_view > li:nth-child({i})')
a_tag = movie_li.find_element(by=By.CSS_SELECTOR, value='.hd > a')
a_tag.click()
time.sleep(1)
movie_name_span = browser.find_element(by=By.CSS_SELECTOR, value='span[property="v:itemreviewed"]')
movie_name = movie_name_span.text
runtime_span = browser.find_element(by=By.CSS_SELECTOR, value='span[property="v:runtime"]')
runtime = runtime_span.text
print(f'电影{movie_name}时长为{runtime}')
browser.back()
time.sleep(2)
print(f'第{page}页获取完成')
try:
next_btn = browser.find_element(by=By.CSS_SELECTOR,value='.next>a')
next_btn.click()
page+=1
except Exception as e:
break