爬虫很多时候除了能够做成项目在服务器上跑以外,还可以做成接口的形式够其他语言调用,即爬虫可以实时的镶嵌到app,web或者其他场景下,当有客户调用时就会启动,无人调用时,就静静的待着。下面说一下利用python中的flask框架来写一个简单的爬虫来供其他语言调用。初级入门很简单的web框架和爬虫之间的结合应用。如果有其他的应用需求,请自行研究。
首先,导包不解释了,自行安装flask就可以了。
然后实例化一个flask对象:
然后写我们的爬虫方法,这里我们以 http://qq.ip138.com/idsearch/index.asp?为例,一个输入身份证便可以查询归属地的网址。
首先我们需要分析这个网页构造,来确定我们的爬虫该怎么写。
我们查看网页源代码,发现我们想要的归属地的信息就在源码中,所以我们利用正则就很方便的取出归属地。
代码如下:
最后,写上flask的路由和启动方式即可:
整体代码:
import flask,json
from flask import request
server=flask.Flask(__name__)#__name__代表当前的python文件。把当前的python文件当做一个服务启动
@server.route('/',methods=['get','post'])#只有在函数前加上@server.route (),这个函数才是个接口,不是一般的函数
def reg():
dict = {}
idcard = request.values.get('userid')
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari/537.36'
}
url = 'http://qq.ip138.com/idsearch/index.asp?action=idcard&userid={}'.format(idcard)
r = requests.get(url,headers=headers)
# print(r.content.decode('gbk'))
a = re.findall('发 证 地:</td><td class="tdc2">(.*?)<br/></td></tr>',r.content.decode('gbk'))
if a == []:
dict['idcard'] = idcard
dict['area'] = ''
return json.dumps(dict, ensure_ascii=False)
else:
dict['idcard'] = idcard
dict['area'] = a[0]
return json.dumps(dict,ensure_ascii=False)
server.run(port=1688,debug=True,host='0.0.0.0')
我们将程序启动,然后用postman发送请求查看结果:
代码请求结果:
运用的python3的环境