Python 中文爬虫
最近因为网站的数据需要推送,但实现的方式是通过打开网站链接 来 实现这种推送方式的,几万条数据需要推送,而每次推送只有几百条数据。为什么每次只能推送几百条?因为数据量太多了,Apache长时间运行一个链接会报超时的错误。但机械性打开链接着实麻烦,所有用 python 写了一个爬虫来反复打开这个链接,直到全部数据推送完成。先上代码:#! /usr/bin/env python# codi...
最近因为网站的数据需要推送,但实现的方式是通过打开网站链接 来 实现这种推送方式的,几万条数据需要推送,而每次推送只有几百条数据。为什么每次只能推送几百条?因为数据量太多了,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).contentdef 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='+etimeopp_hot(url)
因为初学Python,所有在这个爬虫的时间花费的比较多一些,实现逻辑也不难
1,获取地址返回的数据,我这里是动态网页,所有使用requests.get(url)获取网页内容加载的时间比较长,等全部加载完后才会执行下一步。
2,用正则表达式匹配我需要的数据,因为动态网页输出的内容简单,所有直接用中文进行匹配。这里需要注意的是,进行中文匹配和编码没什么关系,输出或显示乱码才需要思考编码问题。中文字符串在前面加个字母u,标示unicode
3,函数自调用,如果一直有匹配到我想的数据,就继续执行。
参考:http://wklken.me/posts/2013/08/31/python-extra-coding-intro.html
更多推荐
所有评论(0)