最近因为网站的数据需要推送,但实现的方式是通过打开网站链接 来 实现这种推送方式的,几万条数据需要推送,而每次推送只有几百条数据。为什么每次只能推送几百条?因为数据量太多了,Apache长时间运行一个链接会报超时的错误。但机械性打开链接着实麻烦,所有用 python 写了一个爬虫来反复打开这个链接,直到全部数据推送完成。

先上代码:

#! /usr/bin/env python
# coding=utf-8
import requests
import sys
import re

#初始化
reload(sys)
sys.setdefaultencoding('utf8')
#pattern = re.compile(ur'(msg)')
p1 = r"(插入成功)"#简单粗暴的正则表达式

#函数声明
def http_get(url):
    return requests.get(url,stream=True).content

def is_str(s,basestring):
    return isinstance(s, basestring)

def opp_hot(url):
    xml_data = http_get(url)
    #print is_str(xml_data,str) #返回true
    #print xml_data.encode('gbk') #命令行显示正常,无乱码

    pattern1 = re.compile(p1,re.M)#我们在编译这段正则表达式
    #matcher1 = re.search(pattern1,xml_data)#在源文本中搜索符合正则表达式的部分
    count = pattern1.findall(xml_data).__len__()
    if count != 0:
        print u"匹配总数:%s"%(count)
        print 'no,I need keep on!'
        print "=================[]==================="
        opp_hot(url)
        #print "no,I need keep on!"
    else:
        print u"匹配总数:%s"%(count)
        print "ok,I maybe finished my work."
        #f.close()
        sys.exit(0)


#开始执行
btime = '1535644800'
etime = '1538323200'    
url = 'http://127.0.0.1/svn/Api/index.php/Orders/PushEASOrder/?uid=admin&sign=357d226172510484a511797c4173fad5db&totest=2&btime='+btime+'&etime='+etime

opp_hot(url)

因为初学Python,所有在这个爬虫的时间花费的比较多一些,实现逻辑也不难
1,获取地址返回的数据,我这里是动态网页,所有使用requests.get(url)获取网页内容加载的时间比较长,等全部加载完后才会执行下一步。
2,用正则表达式匹配我需要的数据,因为动态网页输出的内容简单,所有直接用中文进行匹配。这里需要注意的是,进行中文匹配和编码没什么关系,输出或显示乱码才需要思考编码问题。中文字符串在前面加个字母u,标示unicode
3,函数自调用,如果一直有匹配到我想的数据,就继续执行。

参考:http://wklken.me/posts/2013/08/31/python-extra-coding-intro.html

 

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐