如何利用Python监控别人的网站
作者:虚坏叔叔 发布时间:2022-08-11 16:54:18
标签:Python,监控,网站
场景
可能是你用不到,但是我遇到了这样一个问题,就是我想详细了解我的竞争对手的网站(电商类)销售情况和新品上架情况,但是我总不至于像盯盘一样,在电脑或者手机上一直看着这个站吧!
于是我想到用一个脚本来检测,脚本的功能是如果发现对手出售了商品,就发送我售出商品的名称,价格;如果是新上线了商品,就要邮件告诉我新品的名称,价格,这对于我分析对手的销量和趋势,然后在我的店铺中择优上货是有一定帮助作用的。
另外,这个脚本作用不仅仅如此,你也可以修改一下,包括但不限于监控自己的抖音粉丝上升趋势、其他事件新闻进展、甚至是当前热点等等。
现成的产品
当然,我前面的想法在现实中每个公司、店铺都用得到,而且有人专门开发程序为此而服务,比方说比较好的网页监控工具:Visualping、Distill Web Monitor、Wachete等,他们都是做这个的也都很专业,但是要想深度使用,就要收费了;
国内也有类似的产品,我尝试过。不过也有限制,每天1个网页变化只给10封邮件,申请再多也要收费!
所以吧,自己写来自己用吧!
代码
import requests
from bs4 import BeautifulSoup
import smtplib
from email.mime.text import MIMEText
# 网站 URL
url = "https://"
# 发送邮件的参数
sender = '你的发件人邮箱'
receiver = '你的收件人邮箱'
smtp_server = 'smtp.xxx.com' # 发件人邮箱的 SMTP 服务器地址
smtp_port = 465 # 发件人邮箱的 SMTP 端口
username = '你的发件人邮箱'
password = '你的发件人邮箱密码'
def send_email(subject, body):
# 创建 MIMEText 邮件
msg = MIMEText(body)
msg['Subject'] = subject
msg['From'] = sender
msg['To'] = receiver
# 发送邮件
with smtplib.SMTP_SSL(smtp_server, smtp_port) as server:
server.login(username, password)
server.sendmail(sender, receiver, msg.as_string())
def get_product_info(product_url):
# 获取商品信息
response = requests.get(product_url)
soup = BeautifulSoup(response.text, 'html.parser')
title = soup.find('h1', class_='h3').text
price = soup.find('span', class_='h2').text
stock = soup.find('span', class_='js-product-stock').text
return (title, price, stock)
def check_product_sold_out(product_url):
# 检查商品是否已售出
response = requests.get(product_url)
soup = BeautifulSoup(response.text, 'html.parser')
if soup.find('div', class_='product-sold-out'):
return True
else:
return False
# 定期检查商品
while True:
# 获取网页内容
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
# 查找商品列表
product_list = soup.find('div', class_='js-product-list')
# 检查每个商品是否售出
for product in product_list.find_all('a', class_='product-card'):
product_url = product['href']
product_title = product.find('h2').text
if check_product_sold_out(product_url):
# 商品已售出,发送邮件通知
subject = f'商品已售出:{product_title}'
body = f'商品名称:{product_title}\n'
send_email(subject, body)
else:
# 商品未售出,检查是否为新商品
try:
# 尝试获取商品信息,如果获取失败则说明是新商品
product_title, product_price, product_stock = get_product_info(product_url)
except:
# 新商品,发送邮件通知
subject = f'新商品上架:{product_title}'
body = f'商品名称:{product_title}\n库存:{product_stock}\n价格:{product_price}\n'
send_email(subject, body)
# 等待一段时间后再次检查
time.sleep(300)
解释:这个就是网店的监控程序,新品上架,商品售出会像间谍一样及时通知你!
再赠送一个:
import requests
import hashlib
import time
import smtplib
from email.mime.text import MIMEText
url = 'https://'
def get_hash(url):
response = requests.get(url)
return hashlib.sha256(response.content).hexdigest()
def send_email(content):
sender = ''
receiver = ''
password = ''
smtp_server = ''
smtp_port = 465
message = MIMEText(content)
message['From'] = sender
message['To'] = receiver
message['Subject'] = 'Website Change Alert'
server = smtplib.SMTP_SSL(smtp_server, smtp_port)
server.login(sender, password)
server.sendmail(sender, receiver, message.as_string())
server.quit()
current_hash = get_hash(url)
while True:
new_hash = get_hash(url)
if new_hash != current_hash:
send_email('Website content has changed.')
current_hash = new_hash
else:
time.sleep(30)
解释:这个代码很简单,比较的是网页哈希,只要有变化就会邮件通知,可用于任何场景!
如何使用
上面的代码是python的,修改后可以直接使用。后台运行的方法:
nohup python3 jiankong.py > output.log 2>&1 &
来源:https://blog.csdn.net/biggbang/article/details/130732968


猜你喜欢
- python里的super().init()有什么用?对于python里的super().__init__()有什么作用,很多同学没有弄清楚
- session 不用多介绍,使一个http可以对应一个终端用户。session的本质使用cookie来实现。原理大概是:http 带来服务端
- MySQL 8.0.28引入新功能MySQL 8.0.28开始,新增一个特性,支持监控统计并限制各个连接(会话)的内存消耗,避免大量用户连接
- 关于电子邮件 大学之前,基本不用邮箱,所以基本感觉不到它的存在,也不知道有什么用;然而大学之后,随着认识的人越来越多,知识越来越广
- 一个ASPJPEG组件综合操作的asp类CLASS相关文章:ASP怎么谈到应用到类的?ASP中类的详细介绍(class Property G
- for x in ...循环 就是把每个元素代入变量x,然后执行缩进块的语句。range()函数,可以生成一个整数序列,再通过list()函
- 有时我们需要将一份或者多份PDF文件中的图片提取出来,如果采取在线的网站实现的话又担心图片泄漏,手动操作又觉得麻烦,其实用Python也可以
- asp之家注:那么为什么要使用分页呢?当记录不多的时候,如10个或20个,我们可以也没必要使用分页来显示数据,但是数据是在不断增加的,当到了
- 引言python中的模块、库、包有什么区别?module:一个 .py 文件就是个 modulelib:抽象概念,和另外两个不是一类,只要你
- 在国内外大中型数据库管理系统中,把ORACLE作为数据库管理平台的用户比较多。RACLE 不论是数据库管理能力还是安全性都是无可非
- 如下所示:<!DOCTYPE html><html><head lang="en">
- 先设定一个关系模型如下:from django.db import modelsclass Blog(models.Model): name
- python __init__.py 和 __all__作用一、__init__.py1、导入文件夹包的时候,会运行写在该文件夹包下的__i
- 今天开始学习Python时发现Pycharm竟然过期了需要重新注册,穷苦学生没钱只能再找找百度了浪费了半天时间终于找到一个可以使用的了,支持
- 本文实例为大家分享了Python3连接MySQL模拟转账的具体实现代码,供大家参考,具体内容如下# coding:utf8import sy
- 如何创建列表,或生成列表。这里介绍在python的基础知识里创建或转变或生成列表的一些方法。零个,一个或一系列数据用逗号隔开,放在方括号[
- 1.Django的简介Django是一个基于MVC构造的框架。但是在Django中,控制器接受用户输入的部分由框架自行处理,所以 Djang
- 一、CONCAT函数concat函数是将多个字段或字符串拼接为一个字符串;但是字符串之间没有任何分隔。concat函数官方介绍-- CONC
- 一、Python操作PDF 13大库对比PDF(Portable Document Format)是一种便携文档格式,便于跨操作系统传播文档
- 1、引言通过参考相关博客对hdf5格式简要介绍。hdf5在存储的是支持压缩,使用的方式是blosc,这个是速度最快的也是pandas默认支持