Python 爬取1688货源重量,自动发邮件到指定邮箱(qq),设置定时运行程序
1 # -*- coding: utf-8 -*-
2 # @Time : 2020/7/6 13:46
3 # @Author : Chunfang
4 # @Email : 3470959534@qq.com
5 # @File : test02.py
6 # @Software: PyCharm
7
8 import os,xlrd,time
9 import re
10 import datetime
11 from openpyxl import load_workbook
12 from selenium import webdriver
13 from time import sleep
14 from selenium.webdriver.chrome.service import Service
15
16 def down_data():
17 start = datetime.datetime.now()
18 filepath2 = 'SKU-URL-weight.xlsx' # 新建表格,将唯一的sku,url写入
19
20 wb2 = load_workbook(filepath2)
21 ws2 = wb2.worksheets[0]
22
23 def down_data(url): # 获取每个链接的数据
24 # 加载浏览器带表头数据爬虫
25 c_service = Service(r'D:\Python\Scripts\chromedriver.exe')
26 c_service.command_line_args()
27 c_service.start()
28 profile_directory = r'--user-data-dir=C:\Users\Administrator\AppData\Local\Google\Chrome\User Data'
29 option = webdriver.ChromeOptions()
30 option.add_argument(profile_directory)
31 driver = webdriver.Chrome(options=option)
32 driver.implicitly_wait(3)
33 driver.get(url)
34 sleep(3)
35 data = driver.page_source
36 sleep(2)
37 driver.quit()
38 sleep(2)
39 c_service.stop()
40 return data
41 def station(data):
42 busy = re.findall('<div class="tips" style=".*?<p>.*?(亲.*?回来).*?</p>', data, re.S)
43 # print(busy)
44 error_404 = re.findall('h3 class="title">.*?<em>(抱歉.*?)</em>', data, re.S)
45 # print(error_404)
46 pro_weight = re.findall('<span>.*?<b>.*?重量</b>.*?<em>(.*?)</em>', data, re.S)
47 # print(pro_weight)
48 right = re.findall('title="点击此按钮.*?rel="nofollow"><span>(.*?订购)</span></a>', data, re.S)
49 # print(right)
50 stations.append(busy)
51 stations.append(error_404)
52 stations.append(pro_weight)
53 stations.append(right)
54
55 for i in range(16635,ws2.max_row+1):
56 print('第' + str(i) + '个sku:' + str(ws2.cell(i, 1).value))
57 stations = []
58 data=down_data(ws2.cell(i,2).value)
59 # print(data)
60 station(data)
61 while len(stations[0])!=0:#没有加载出来
62 stations = []
63 data = down_data(ws2.cell(i, 2).value)
64 station(data)
65 print(stations)
66 if len(stations[1])==0:#判断404
67 if len(stations[2])==0:#判断重量
68 if len(stations[3])==0:#判断产品是否有货,可订购
69 ws2.cell(i, 3).value = '产品下架'
70 else:
71 ws2.cell(i,3).value = '产品有货,没有标注重量'
72 else:
73 ws2.cell(i, 3).value = stations[2][1]#添加重量
74 else:
75 ws2.cell(i,3).value = stations[1][0]#抱歉404
76 print(stations)
77
78 wb2.save(filepath2)
79
80 end = datetime.datetime.now()
81 print('Running time: %s Seconds'%(end-start))
82
83 #发邮件给对方邮箱
84 import smtplib
85 from email.mime.text import MIMEText
86 from email.mime.multipart import MIMEMultipart
87 from email.mime.image import MIMEImage
88 from email.mime.application import MIMEApplication
89
90 #设置服务器所需信息
91 fromaddr ='3470959534@qq.com'
92 password = '验证码'#qq的邮箱验证码
93 toaddrs = ['3470959534@qq.com','1725714926@qq.com']
94
95 #邮件内容设置
96 message = MIMEText('hello! 这是跑货源结果,请查收','plain','utf-8')
97 message['Subject']='测试邮件'
98
99 excel_file =filepath2
100 excel_apart = MIMEApplication(open(excel_file,'rb').read())
101 excel_apart.add_header('Content-Disposition','atttachment',filename=excel_file)
102
103 m = MIMEMultipart()
104 m.attach(message)
105 m.attach(excel_apart)
106
107 try:
108 server = smtplib.SMTP('smtp.qq.com')
109 server.login(fromaddr,password)
110 server.sendmail(fromaddr,toaddrs,m.as_string(),)
111 print('success')
112 server.quit()
113 except smtplib.SMTPException as e:
114 print('error:',e)
115
116 down_data()
117 #设置时间跑店小秘货源
118 # while True:
119 # time_now = time.strftime('%H:%M:%S',time.localtime())
120 #
121 # if time_now =="20:00:10":
122 # down_data()
123 # # print('Hello')
124 # subject = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())+'定时发送测试'
125 # print(subject)
126 # time.sleep(2)
Python 爬取1688货源重量,自动发邮件到指定邮箱(qq),设置定时运行程序的更多相关文章
- python爬取网站页面时,部分标签无指定属性而报错
在写爬取页面a标签下href属性的时候,有这样一个问题,如果a标签下没有href这个属性则会报错,如下: 百度了有师傅用正则匹配的,方法感觉都不怎么好,查了BeautifulSoup的官方文档,发现一 ...
- python爬取免费优质IP归属地查询接口
python爬取免费优质IP归属地查询接口 具体不表,我今天要做的工作就是: 需要将数据库中大量ip查询出起归属地 刚开始感觉好简单啊,毕竟只需要从百度找个免费接口然后来个python脚本跑一晚上就o ...
- 没有内涵段子可以刷了,利用Python爬取段友之家贴吧图片和小视频(含源码)
由于最新的视频整顿风波,内涵段子APP被迫关闭,广大段友无家可归,但是最近发现了一个"段友"的app,版本更新也挺快,正在号召广大段友回家,如下图,有兴趣的可以下载看看(ps:我不 ...
- python爬取人民币汇率中间价
python爬取人民币汇率中间价,从最权威的网站中国外汇交易中心. 首先找到相关网页,解析链接,这中间需要经验和耐心,在此不多说. 以人民币兑美元的汇率为例(CNY/USD),脚本详情如下: wind ...
- 萌新学习Python爬取B站弹幕+R语言分词demo说明
代码地址如下:http://www.demodashi.com/demo/11578.html 一.写在前面 之前在简书首页看到了Python爬虫的介绍,于是就想着爬取B站弹幕并绘制词云,因此有了这样 ...
- Python爬取招聘信息,并且存储到MySQL数据库中
前面一篇文章主要讲述,如何通过Python爬取招聘信息,且爬取的日期为前一天的,同时将爬取的内容保存到数据库中:这篇文章主要讲述如何将python文件压缩成exe可执行文件,供后面的操作. 这系列文章 ...
- Python爬取视频指南
摘自:https://www.jianshu.com/p/9ca86becd86d 前言 前两天尔羽说让我爬一下菜鸟窝的教程视频,这次就跟大家来说说Python爬取视频的经验 正文 https://w ...
- Python爬取网页信息
Python爬取网页信息的步骤 以爬取英文名字网站(https://nameberry.com/)中每个名字的评论内容,包括英文名,用户名,评论的时间和评论的内容为例. 1.确认网址 在浏览器中输入初 ...
- Python 爬取 热词并进行分类数据分析-[解释修复+热词引用]
日期:2020.02.02 博客期:141 星期日 [本博客的代码如若要使用,请在下方评论区留言,之后再用(就是跟我说一声)] 所有相关跳转: a.[简单准备] b.[云图制作+数据导入] c.[拓扑 ...
随机推荐
- Java基础知识 String StringBuffer StringBuilder三者的区别(面试题)
相同点:String.StringBuffer.StringBuilder最终底层存储与操作的都是char数组,StringBuffer和StringBuilder都继承了AbstractString ...
- bzoj4596/luoguP4336 [SHOI2016]黑暗前的幻想乡(矩阵树定理,容斥)
bzoj4596/luoguP4336 [SHOI2016]黑暗前的幻想乡(矩阵树定理,容斥) bzoj Luogu 题解时间 看一看数据范围,求生成树个数毫无疑问直接上矩阵树定理. 但是要求每条边都 ...
- 一个tomcat部署两个springboot服务时启动JMX报错
一.问题来源 今天在部署开发好的组件的时候,发现无法启动,检查启动日志,报如下错误: 2022-03-17T10:39:41.823+08:00 ERROR vediomanage.vediomana ...
- Jpa 在CriteriaBuilder中添加where条件NotIn子查询
final CriteriaBuilder cb = entityManager.getCriteriaBuilder(); final CriteriaQuery<Person> cq ...
- Spring Bean生命周期回调方法
参阅官方文档:https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#beans-factory ...
- 详解 IOC
什么是IOC: IOC-Inversion Of Control,即"控制反转",不是什么技术,而是一种设计思想.在Java开发中,IOC意味着将你设计好的对象交给容器控制,而不是 ...
- Python这些位运算的妙用,绝对让你大开眼界
位运算的性能大家想必是清楚的,效率绝对高.相信爱好源码的同学,在学习阅读源码的过程中会发现不少源码使用了位运算.但是为啥在实际编程过程中应用少呢?想必最大的原因,是较为难懂.不过,在面试的过程中,在手 ...
- 原理图Checklist
类别 描述 检视规则 原理图需要进行检视,提交集体检视是需要完成自检,确保没有低级问题. 检视规则 原理图要和公司团队和可以邀请的专家一起进行检视. 检视规则 第一次原理图发出进行集体检视后所有的修改 ...
- Codepen 每日精选(2018-4-22)
按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以打开原始页面. 图片切换效果https://codepen.io/AlikinVV/f... 基于 dom 的可换肤的自行 ...
- ES6-11学习笔记--Generator
基本使用 function后面加个*号 function* foo() { for (let i = 0; i < 3; i++) { yield i; // yield不能作为构造函数去使用, ...