首页 > 代码库 > 在程序中使用命令行的方式来调用py文件
在程序中使用命令行的方式来调用py文件
做这个主要是程序可以做到直接调用一个脚本,而不是从脚本中把类或者函数import出来这样调用,比如我们写的python命令行文件,让java来调用,让c++来调用,都是可以的。这样不需要整个语言都用py,否则什么都自己做加大了工作量。
做这个需要两点内容就行,一个是写一个接受命令行参数的脚本。
另外一个是写一个执行cmd命令的代码并获取控制台的结果。
以爬房天下网站的二手房为例,传入城市名和房屋名称就能搜到信息。可能有些人觉得为什么不去官网查,要做这个是不是多次一举,不是这样的,做这个是需要提供一个服务接口与其他产品对接,不是手动去搜索的。再说,在官网,搜索不同的城市的房子,是需要去切换选择城市再跳转的,非常的麻烦。
这个是城市名称对应的域名,先爬取出来,只要前端传来城市名就去相关的域名下爬取。爬取程序很简单就不贴在这里了。
#coding=utf-8 city_url_dictx={"中卫": "http://esf.zhongwei.fang.com", "七台河": "http://esf.qitaihe.fang.com", "当涂": "http://esf.dangtu.fang.com", "巫山": "http://esf.wushan.fang.com", "文安": "http://esf.wenan.fang.com", "龙口": "http://esf.longkou.fang.com", "红河": "http://esf.honghe.fang.com", "滨州": "http://esf.binzhou.fang.com", "白城": "http://esf.baicheng.fang.com", "泉港": "http://esf.quangang.fang.com", "博罗": "http://esf.boluo.fang.com", "池州": "http://esf.chizhou.fang.com", "姜堰": "http://esf.jiangyan.fang.com", "莆田": "http://esf.putian.fang.com", "忠县": "http://esf.zhongxian.fang.com", "大连": "http://esf.dl.fang.com", "莱芜": "http://esf.laiwu.fang.com", "和田": "http://esf.hetian.fang.com", "贵阳": "http://esf.gy.fang.com", "法库": "http://esf.faku.fang.com", "江阴": "http://esf.jy.fang.com", "钦州": "http://esf.qinzhou.fang.com", "赣州": "http://esf.ganzhou.fang.com", "大足": "http://esf.dazu.fang.com", "金堂": "http://esf.scjt.fang.com", "陇南": "http://esf.longnan.fang.com", "平山": "http://esf.hbps.fang.com", "郑州": "http://esf.zz.fang.com", "黑河": "http://esf.heihe.fang.com", "汉中": "http://esf.hanzhong.fang.com", "衡水": "http://esf.hs.fang.com", "望城": "http://esf.cswc.fang.com", "济宁": "http://esf.jining.fang.com", "高密": "http://esf.gaomi.fang.com", "阳泉": "http://esf.yangquan.fang.com", "通辽": "http://esf.tl.fang.com", "户县": "http://esf.huxian.fang.com", "深圳": "http://esf.sz.fang.com", "邯郸": "http://esf.hd.fang.com", "汝州": "http://esf.ruzhou.fang.com", "台州": "http://esf.tz.fang.com", "潮州": "http://esf.chaozhou.fang.com", "张家界": "http://esf.zhangjiajie.fang.com", "九江": "http://esf.jiujiang.fang.com", "栖霞": "http://esf.qixia.fang.com", "云浮": "http://esf.yunfu.fang.com", "汕尾": "http://esf.shanwei.fang.com", "滕州": "http://esf.tengzhou.fang.com", "商洛": "http://esf.shangluo.fang.com", "五常": "http://esf.wuchang.fang.com", "常州": "http://esf.cz.fang.com", "库尔勒": "http://esf.kuerle.fang.com", "梧州": "http://esf.wuzhou.fang.com", "邕宁": "http://esf.yongning.fang.com", "平湖": "http://esf.pinghu.fang.com", "海拉尔": "http://esf.hailaer.fang.com", "当阳": "http://esf.dangyang.fang.com", "宜城": "http://esf.hbyc.fang.com", "偃师": "http://esf.yanshi.fang.com", "淮安": "http://esf.huaian.fang.com", "西双版纳": "http://esf.xishuangbanna.fang.com", "阳春": "http://esf.yangchun.fang.com", "临清": "http://esf.linqing.fang.com", "邳州": "http://esf.pizhou.fang.com", "綦江": "http://esf.qijiang.fang.com", "晋州": "http://esf.hbjz.fang.com", "石嘴山": "http://esf.shizuishan.fang.com", "句容": "http://esf.jr.fang.com", "德惠": "http://esf.dehui.fang.com", "哈尔滨": "http://esf.hrb.fang.com", "张北": "http://esf.zhangbei.fang.com", "新乡": "http://esf.xx.fang.com", "宁波": "http://esf.nb.fang.com", "肇州": "http://esf.zhaozhou.fang.com", "建德": "http://esf.jiande.fang.com", "周至": "http://esf.zhouzhi.fang.com", "西安": "http://esf.xian.fang.com", "即墨": "http://esf.jimo.fang.com", "天水": "http://esf.tianshui.fang.com", "新乐": "http://esf.xinle.fang.com", "巴彦淖尔": "http://esf.byne.fang.com", "怒江": "http://esf.nujiang.fang.com", "蓬莱": "http://esf.penglai.fang.com", "东台": "http://esf.dongtai.fang.com", "榆林": "http://esf.sxyulin.fang.com", "娄底": "http://esf.loudi.fang.com", "香港": "http://esf.hk.soufun.com", "繁昌": "http://esf.fanchang.fang.com", "来宾": "http://esf.laibin.fang.com", "阿里": "http://esf.ali.fang.com", "新津": "http://esf.xinjin.fang.com", "平凉": "http://esf.pingliang.fang.com", "林芝": "http://esf.linzhi.fang.com", "临朐": "http://esf.linqu.fang.com", "图木舒克": "http://esf.tmsk.fang.com", "乐亭": "http://esf.hblt.fang.com", "海宁": "http://esf.haining.fang.com", "进贤": "http://esf.jinxian.fang.com", "宜兴": "http://esf.yixing.fang.com", "宜春": "http://esf.yichun.fang.com", "固原": "http://esf.guyuan.fang.com", "海安": "http://esf.haian.fang.com", "莱西": "http://esf.laixi.fang.com", "石河子": "http://esf.shihezi.fang.com", "河池": "http://esf.hechi.fang.com", "霸州": "http://esf.hbbz.fang.com", "普宁": "http://esf.puning.fang.com", "横县": "http://esf.hengxian.fang.com", "桐乡": "http://esf.tongxiang.fang.com", "齐齐哈尔": "http://esf.qiqihaer.fang.com", "耒阳": "http://esf.leiyang.fang.com", "仪征": "http://esf.yizheng.fang.com", "永登": "http://esf.yongdeng.fang.com", "伊川": "http://esf.yichuan.fang.com", "广州": "http://esf.gz.fang.com", "丰城": "http://esf.jxfc.fang.com", "苏州": "http://esf.suzhou.fang.com", "福清": "http://esf.fq.fang.com", "仙桃": "http://esf.xiantao.fang.com", "克孜勒苏": "http://esf.kzls.fang.com", "济南": "http://esf.jn.fang.com", "江门": "http://esf.jm.fang.com", "三亚": "http://esf.sanya.fang.com", "莱州": "http://esf.laizhou.fang.com", "郴州": "http://esf.chenzhou.fang.com", "芜湖": "http://esf.wuhu.fang.com", "内江": "http://esf.neijiang.fang.com", "宜阳": "http://esf.hnyy.fang.com", "龙海": "http://esf.longhai.fang.com", "佛山": "http://esf.fs.fang.com", "儋州": "http://esf.danzhou.fang.com", "海林": "http://esf.hailin.fang.com", "舟山": "http://esf.zhoushan.fang.com", "惠州": "http://esf.huizhou.fang.com", "哈密": "http://esf.hami.fang.com", "商丘": "http://esf.shangqiu.fang.com", "益阳": "http://esf.yiyang.fang.com", "大庆": "http://esf.daqing.fang.com", "昆明": "http://esf.km.fang.com", "洛阳": "http://esf.ly.fang.com", "朝阳": "http://esf.chaoyang.fang.com", "石柱": "http://esf.shizhu.fang.com", "佳木斯": "http://esf.jiamusi.fang.com", "清远": "http://esf.qingyuan.fang.com", "安达": "http://esf.anda.fang.com", "铜仁": "http://esf.tongren.fang.com", "通化": "http://esf.tonghua.fang.com", "浏阳": "http://esf.liuyang.fang.com", "德化": "http://esf.dh.fang.com", "邵阳": "http://esf.shaoyang.fang.com", "冀州": "http://esf.jz.fang.com", "荆门": "http://esf.jingmen.fang.com", "本溪": "http://esf.benxi.fang.com", "珠海": "http://esf.zh.fang.com", "兴安盟": "http://esf.xam.fang.com", "庐江": "http://esf.lujiang.fang.com", "开平": "http://esf.kaiping.fang.com", "依兰": "http://esf.yilan.fang.com", "大邑": "http://esf.dayi.fang.com", "沛县": "http://esf.peixian.fang.com", "廊坊": "http://esf.lf.fang.com", "诸暨": "http://esf.zhuji.fang.com", "昌黎": "http://esf.changli.fang.com", "锡林浩特": "http://esf.xilinhaote.fang.com", "宜宾": "http://esf.yibin.fang.com", "辽源": "http://esf.liaoyuan.fang.com", "凤城": "http://esf.fengcheng.fang.com", "开阳": "http://esf.kaiyang.fang.com", "长清": "http://esf.jncq.fang.com", "资阳": "http://esf.ziyang.fang.com", "余姚": "http://esf.yuyao.fang.com", "都江堰": "http://esf.dujiangyan.fang.com", "四平": "http://esf.siping.fang.com", "安吉": "http://esf.aj.fang.com", "泰州": "http://esf.taizhou.fang.com", "抚州": "http://esf.jxfuzhou.fang.com", "海西": "http://esf.haixi.fang.com", "海南": "http://esf.hn.fang.com", "泰兴": "http://esf.taixing.fang.com", "百色": "http://esf.baise.fang.com", "恩施": "http://esf.enshi.fang.com", "杭州": "http://esf.hz.fang.com", "黄南": "http://esf.huangnan.fang.com", "酒泉": "http://esf.jiuquan.fang.com", "雅安": "http://esf.yaan.fang.com", "北京": "http://esf1.fang.com", "自贡": "http://esf.zigong.fang.com", "汝阳": "http://esf.ruyang.fang.com", "晋城": "http://esf.jc.fang.com", "武汉": "http://esf.wuhan.fang.com", "济源": "http://esf.jiyuan.fang.com", "奉化": "http://esf.fenghua.fang.com", "大同": "http://esf.datong.fang.com", "东港": "http://esf.donggang.fang.com", "安溪": "http://esf.fjax.fang.com", "广元": "http://esf.guangyuan.fang.com", "肇庆": "http://esf.zhaoqing.fang.com", "兴化": "http://esf.xinghua.fang.com", "抚顺": "http://esf.fushun.fang.com", "韶山": "http://esf.ss.fang.com", "荆州": "http://esf.jingzhou.fang.com", "普洱": "http://esf.puer.fang.com", "宁德": "http://esf.ningde.fang.com", "五指山": "http://esf.wuzhishan.fang.com", "巢湖": "http://esf.chaohu.fang.com", "桐城": "http://esf.tongcheng.fang.com", "秦皇岛": "http://esf.qhd.fang.com", "沧州": "http://esf.cangzhou.fang.com", "南通": "http://esf.nt.fang.com", "栾川": "http://esf.luanchuan.fang.com", "南宁": "http://esf.nn.fang.com", "新民": "http://esf.xinmin.fang.com", "玉环": "http://esf.yuhuan.fang.com", "昌邑": "http://esf.changyi.fang.com", "南安": "http://esf.nanan.fang.com", "中山": "http://esf.zs.fang.com", "漳州": "http://esf.zhangzhou.fang.com", "清徐": "http://esf.qingxu.fang.com", "铜梁": "http://esf.tongliang.fang.com", "清镇": "http://esf.qingzhen.fang.com", "开封": "http://esf.kaifeng.fang.com", "泸州": "http://esf.luzhou.fang.com", "喀什": "http://esf.kashi.fang.com", "毕节": "http://esf.bijie.fang.com", "贺州": "http://esf.hezhou.fang.com", "阜宁": "http://esf.funing.fang.com", "玉树": "http://esf.yushu.fang.com", "菏泽": "http://esf.heze.fang.com", "蚌埠": "http://esf.bengbu.fang.com", "商河": "http://esf.sdsh.fang.com", "玉林": "http://esf.yl.fang.com", "株洲": "http://esf.zhuzhou.fang.com", "靖江": "http://esf.jingjiang.fang.com", "永城": "http://esf.yongcheng.fang.com", "阜阳": "http://esf.fuyang.fang.com", "景德镇": "http://esf.jingdezhen.fang.com", "达州": "http://esf.dazhou.fang.com", "海阳": "http://esf.haiyang.fang.com", "大理": "http://esf.dali.fang.com", "漯河": "http://esf.luohe.fang.com", "汉南": "http://esf.whhn.fang.com", "黄冈": "http://esf.huanggang.fang.com", "元氏": "http://esf.hbys.fang.com", "长葛": "http://esf.changge.fang.com", "永泰": "http://esf.yongtai.fang.com", "呼伦贝尔": "http://esf.hlbe.fang.com", "汕头": "http://esf.st.fang.com", "宿州": "http://esf.ahsuzhou.fang.com", "信阳": "http://esf.xinyang.fang.com", "上海": "http://esf.sh.fang.com", "定州": "http://esf.dingzhou.fang.com", "鞍山": "http://esf.anshan.fang.com", "湛江": "http://esf.zj.fang.com", "永川": "http://esf.yongchuan.fang.com", "永州": "http://esf.yongzhou.fang.com", "铜陵": "http://esf.tongling.fang.com", "章丘": "http://esf.zhangqiu.fang.com", "钟祥": "http://esf.zhongxiang.fang.com", "无极": "http://esf.hbwj.fang.com", "吐鲁番": "http://esf.tulufan.fang.com", "丽江": "http://esf.lijiang.fang.com", "邛崃": "http://esf.qionglai.fang.com", "朔州": "http://esf.shuozhou.fang.com", "石狮": "http://esf.shishi.fang.com", "顺德": "http://esf.shunde.fang.com", "阿拉尔": "http://esf.alaer.fang.com", "鄂尔多斯": "http://esf.erds.fang.com", "武安": "http://esf.wuan.fang.com", "海东": "http://esf.haidong.fang.com", "六安": "http://esf.luan.fang.com", "扬州": "http://esf.yz.fang.com", "锡林郭勒盟": "http://esf.xlglm.fang.com", "湘潭": "http://esf.xt.fang.com", "慈溪": "http://esf.cixi.fang.com", "胶州": "http://esf.jiaozhou.fang.com", "庆阳": "http://esf.qingyang.fang.com", "肥城": "http://esf.feicheng.fang.com", "连云港": "http://esf.lyg.fang.com", "梅州": "http://esf.meizhou.fang.com", "伊犁": "http://esf.yili.fang.com", "南京": "http://esf.nanjing.fang.com", "潼南": "http://esf.tongnan.fang.com", "张家口": "http://esf.zhangjiakou.fang.com", "永安": "http://esf.ya.fang.com", "承德": "http://esf.chengde.fang.com", "咸阳": "http://esf.xianyang.fang.com", "瓦房店": "http://esf.wafangdian.fang.com", "长乐": "http://esf.changle.fang.com", "合川": "http://esf.hechuan.fang.com", "尚志": "http://esf.shangzhi.fang.com", "奎屯": "http://esf.kuitun.fang.com", "无锡": "http://esf.wuxi.fang.com", "南昌": "http://esf.nc.fang.com", "普兰店": "http://esf.pulandian.fang.com", "天门": "http://esf.tianmen.fang.com", "济阳": "http://esf.sdjy.fang.com", "阿克苏": "http://esf.akesu.fang.com", "克拉玛依": "http://esf.kelamayi.fang.com", "龙门": "http://esf.gdlm.fang.com", "烟台": "http://esf.yt.fang.com", "万宁": "http://esf.wanning.fang.com", "迁西": "http://esf.qianxi.fang.com", "诸城": "http://esf.zhucheng.fang.com", "上饶": "http://esf.shangrao.fang.com", "威海": "http://esf.weihai.fang.com", "大兴安岭": "http://esf.dxal.fang.com", "中牟": "http://esf.zhongmou.fang.com", "海城": "http://esf.haicheng.fang.com", "莱阳": "http://esf.laiyang.fang.com", "金坛": "http://esf.jintan.fang.com", "高碑店": "http://esf.gaobeidian.fang.com", "邹城": "http://esf.zoucheng.fang.com", "唐山": "http://esf.ts.fang.com", "遂宁": "http://esf.suining.fang.com", "辽中": "http://esf.liaozhong.fang.com", "铁岭": "http://esf.tieling.fang.com", "张家港": "http://esf.zjg.fang.com", "武隆": "http://esf.wulong.fang.com", "鹰潭": "http://esf.yingtan.fang.com", "万州": "http://esf.wanzhou.fang.com", "银川": "http://esf.yinchuan.fang.com", "荣昌": "http://esf.rongchang.fang.com", "甘南": "http://esf.gannan.fang.com", "运城": "http://esf.yuncheng.fang.com", "三明": "http://esf.sanming.fang.com", "防城港": "http://esf.fangchenggang.fang.com", "长岛": "http://esf.ytcd.fang.com", "镇江": "http://esf.zhenjiang.fang.com", "延安": "http://esf.yanan.fang.com", "宾县": "http://esf.binxian.fang.com", "潜江": "http://esf.qj.fang.com", "醴陵": "http://esf.liling.fang.com", "临汾": "http://esf.linfen.fang.com", "安宁": "http://esf.anning.fang.com", "遵化": "http://esf.zunhua.fang.com", "天津": "http://esf.tj.fang.com", "梁平": "http://esf.liangping.fang.com", "日照": "http://esf.rz.fang.com", "马鞍山": "http://esf.mas.fang.com", "安顺": "http://esf.anshun.fang.com", "宜昌": "http://esf.yc.fang.com", "霍邱": "http://esf.huoqiu.fang.com", "江都": "http://esf.jiangdu.fang.com", "垫江": "http://esf.dianjiang.fang.com", "锦州": "http://esf.jinzhou.fang.com", "固镇": "http://esf.guzhen.fang.com", "宁海": "http://esf.ninghai.fang.com", "伊春": "http://esf.hljyichun.fang.com", "丰都": "http://esf.fengdu.fang.com", "海北": "http://esf.haibei.fang.com", "濮阳": "http://esf.puyang.fang.com", "武威": "http://esf.wuwei.fang.com", "阿拉善盟": "http://esf.alsm.fang.com", "延边": "http://esf.yanbian.fang.com", "乐山": "http://esf.leshan.fang.com", "湘西": "http://esf.xiangxi.fang.com", "山南": "http://esf.shannan.fang.com", "肇东": "http://esf.zhaodong.fang.com", "渭南": "http://esf.weinan.fang.com", "榆树": "http://esf.jlys.fang.com", "东海": "http://esf.donghai.fang.com", "宝应": "http://esf.baoying.fang.com", "睢宁": "http://esf.jssn.fang.com", "新郑": "http://esf.xinzheng.fang.com", "茂名": "http://esf.maoming.fang.com", "阳江": "http://esf.yangjiang.fang.com", "常宁": "http://esf.cn.fang.com", "靖安": "http://esf.jxja.fang.com", "德清": "http://esf.deqing.fang.com", "赤峰": "http://esf.chifeng.fang.com", "南阳": "http://esf.nanyang.fang.com", "赵县": "http://esf.hbzx.fang.com", "长春": "http://esf.changchun.fang.com", "徐州": "http://esf.xz.fang.com", "枝江": "http://esf.zhijiang.fang.com", "南平": "http://esf.nanping.fang.com", "甘孜": "http://esf.ganzi.fang.com", "高淳": "http://esf.njgc.fang.com", "德宏": "http://esf.dehong.fang.com", "潍坊": "http://esf.wf.fang.com", "太原": "http://esf.taiyuan.fang.com", "湖州": "http://esf.huzhou.fang.com", "肥东": "http://esf.feidong.fang.com", "吉安": "http://esf.jian.fang.com", "吉林": "http://esf.jl.fang.com", "临猗": "http://esf.sxly.fang.com", "乌鲁木齐": "http://esf.xj.fang.com", "淮北": "http://esf.huaibei.fang.com", "庄河": "http://esf.lnzh.fang.com", "双鸭山": "http://esf.shuangyashan.fang.com", "农安": "http://esf.nongan.fang.com", "彭州": "http://esf.pengzhou.fang.com", "葫芦岛": "http://esf.huludao.fang.com", "平度": "http://esf.pingdu.fang.com", "修文": "http://esf.xiuwen.fang.com", "宜良": "http://esf.ynyl.fang.com", "盐城": "http://esf.yancheng.fang.com", "宾阳": "http://esf.gxby.fang.com", "怀化": "http://esf.huaihua.fang.com", "台安": "http://esf.lnta.fang.com", "海门": "http://esf.haimen.fang.com", "临安": "http://esf.linan.fang.com", "许昌": "http://esf.xuchang.fang.com", "镇海": "http://esf.zhenhai.fang.com", "楚雄": "http://esf.chuxiong.fang.com", "临海": "http://esf.linhai.fang.com", "台山": "http://esf.taishan.fang.com", "闽清": "http://esf.minqing.fang.com", "迁安": "http://esf.qianan.fang.com", "黔江": "http://esf.qianjiang.fang.com", "新沂": "http://esf.xinyi.fang.com", "绵阳": "http://esf.mianyang.fang.com", "铜川": "http://esf.tongchuan.fang.com", "宝鸡": "http://esf.baoji.fang.com", "广安": "http://esf.guangan.fang.com", "保山": "http://esf.baoshan.fang.com", "吴江": "http://esf.wj.fang.com", "三沙": "http://esf.sansha.fang.com", "白银": "http://esf.baiyin.fang.com", "临沂": "http://esf.linyi.fang.com", "定西": "http://esf.dingxi.fang.com", "衢州": "http://esf.quzhou.fang.com", "平阴": "http://esf.sdpy.fang.com", "白山": "http://esf.baishan.fang.com", "晋中": "http://esf.jinzhong.fang.com", "阿坝州": "http://esf.abazhou.fang.com", "荥阳": "http://esf.xingyang.fang.com", "温岭": "http://esf.wenling.fang.com", "启东": "http://esf.qidong.fang.com", "泉山": "http://esf.quanshan.fang.com", "宣城": "http://esf.xuancheng.fang.com", "临沧": "http://esf.lincang.fang.com", "温州": "http://esf.wz.fang.com", "福安": "http://esf.fuan.fang.com", "惠安": "http://esf.huian.fang.com", "沭阳": "http://esf.shuyang.fang.com", "富阳": "http://esf.zjfy.fang.com", "西宁": "http://esf.xn.fang.com", "禹州": "http://esf.hnyz.fang.com", "肥西": "http://esf.feixi.fang.com", "迪庆": "http://esf.diqing.fang.com", "如皋": "http://esf.rugao.fang.com", "招远": "http://esf.zy.fang.com", "衡阳": "http://esf.hengyang.fang.com", "峨眉山": "http://esf.emeishan.fang.com", "宿迁": "http://esf.sq.fang.com", "亳州": "http://esf.bozhou.fang.com", "东方": "http://esf.dongfang.fang.com", "新密": "http://esf.xinmi.fang.com", "舞钢": "http://esf.wg.fang.com", "康平": "http://esf.kangping.fang.com", "遵义": "http://esf.zunyi.fang.com", "阜新": "http://esf.fuxin.fang.com", "安阳": "http://esf.anyang.fang.com", "如东": "http://esf.rudong.fang.com", "胶南": "http://esf.jiaonan.fang.com", "象山": "http://esf.zjxs.fang.com", "凉山": "http://esf.liangshan.fang.com", "北海": "http://esf.bh.fang.com", "沈阳": "http://esf.sy.fang.com", "兰州": "http://esf.lz.fang.com", "兰考": "http://esf.lankao.fang.com", "溧阳": "http://esf.liyang.fang.com", "长沙": "http://esf.cs.fang.com", "咸宁": "http://esf.xianning.fang.com", "鹤岗": "http://esf.hegang.fang.com", "盘锦": "http://esf.panjin.fang.com", "深州": "http://esf.hbsz.fang.com", "辽阳": "http://esf.liaoyang.fang.com", "绥化": "http://esf.suihua.fang.com", "长丰": "http://esf.ahcf.fang.com", "襄阳": "http://esf.xiangyang.fang.com", "五河": "http://esf.wuhe.fang.com", "韶关": "http://esf.shaoguan.fang.com", "龙岩": "http://esf.longyan.fang.com", "常熟": "http://esf.changshu.fang.com", "福州": "http://esf.fz.fang.com", "泰安": "http://esf.taian.fang.com", "河源": "http://esf.heyuan.fang.com", "永春": "http://esf.yongchun.fang.com", "巩义": "http://esf.gongyi.fang.com", "淮南": "http://esf.huainan.fang.com", "肇源": "http://esf.zhaoyuan.fang.com", "金昌": "http://esf.jinchang.fang.com", "成都": "http://esf.cd.fang.com", "榆中": "http://esf.yuzhong.fang.com", "湘乡": "http://esf.xiangxiang.fang.com", "安丘": "http://esf.anqiu.fang.com", "鹤山": "http://esf.heshan.fang.com", "滦南": "http://esf.luannan.fang.com", "随州": "http://esf.suizhou.fang.com", "果洛": "http://esf.guoluo.fang.com", "忻州": "http://esf.xinzhou.fang.com", "长兴": "http://esf.changxing.fang.com", "公主岭": "http://esf.gongzhuling.fang.com", "博尔塔拉": "http://esf.betl.fang.com", "滁州": "http://esf.chuzhou.fang.com", "东营": "http://esf.dy.fang.com", "拉萨": "http://esf.lasa.fang.com", "保定": "http://esf.bd.fang.com", "长治": "http://esf.changzhi.fang.com", "鸡西": "http://esf.jixi.fang.com", "蓝田": "http://esf.lantian.fang.com", "邢台": "http://esf.xingtai.fang.com", "崇州": "http://esf.chongzhou.fang.com", "宜都": "http://esf.yidu.fang.com", "崇左": "http://esf.chongzuo.fang.com", "包头": "http://esf.bt.fang.com", "鄢陵": "http://esf.yanling.fang.com", "三河": "http://esf.hbsh.fang.com", "黔西南": "http://esf.qianxinan.fang.com", "绍兴": "http://esf.shaoxing.fang.com", "聊城": "http://esf.lc.fang.com", "青龙": "http://esf.hbql.fang.com", "寿光": "http://esf.sg.fang.com", "巴中": "http://esf.bazhong.fang.com", "玉山": "http://esf.ksys.fang.com", "松原": "http://esf.songyuan.fang.com", "任丘": "http://esf.renqiu.fang.com", "鹤壁": "http://esf.hebi.fang.com", "老河口": "http://esf.lhk.fang.com", "厦门": "http://esf.xm.fang.com", "黔南": "http://esf.qiannan.fang.com", "罗源": "http://esf.luoyuan.fang.com", "巴彦": "http://esf.bayan.fang.com", "澳门": "http://esf.macau.fang.com", "上虞": "http://esf.shangyu.fang.com", "新丰": "http://esf.xf.fang.com", "德阳": "http://esf.deyang.fang.com", "新余": "http://esf.xinyu.fang.com", "桐庐": "http://esf.zjtl.fang.com", "吕梁": "http://esf.lvliang.fang.com", "怀仁": "http://esf.huairen.fang.com", "淄博": "http://esf.zb.fang.com", "青州": "http://esf.qingzhou.fang.com", "鄂州": "http://esf.ezhou.fang.com", "邓州": "http://esf.dengzhou.fang.com", "五家渠": "http://esf.wujiaqu.fang.com", "营口": "http://esf.yk.fang.com", "丽水": "http://esf.ls.fang.com", "丹东": "http://esf.dandong.fang.com", "昆山": "http://esf.ks.fang.com", "嘉峪关": "http://esf.jiayuguan.fang.com", "宁乡": "http://esf.ningxiang.fang.com", "泉州": "http://esf.qz.fang.com", "攀枝花": "http://esf.panzhihua.fang.com", "文山": "http://esf.wenshan.fang.com", "石家庄": "http://esf.sjz.fang.com", "太仓": "http://esf.tc.fang.com", "合肥": "http://esf.hf.fang.com", "淳安": "http://esf.chunan.fang.com", "东莞": "http://esf.dg.fang.com", "昌乐": "http://esf.sdcl.fang.com", "枣庄": "http://esf.zaozhuang.fang.com", "玉田": "http://esf.yutian.fang.com", "辛集": "http://esf.xinji.fang.com", "乐清": "http://esf.yueqing.fang.com", "江津": "http://esf.jiangjin.fang.com", "重庆": "http://esf.cq.fang.com", "罗定": "http://esf.ld.fang.com", "简阳": "http://esf.jianyang.fang.com", "焦作": "http://esf.jiaozuo.fang.com", "攸县": "http://esf.youxian.fang.com", "蓟州": "http://esf.jizhou.fang.com", "铜山": "http://esf.tongshan.fang.com", "广饶": "http://esf.guangrao.fang.com", "枣阳": "http://esf.hbzy.fang.com", "巴州": "http://esf.bazhou.fang.com", "牡丹江": "http://esf.mudanjiang.fang.com", "乌海": "http://esf.wuhai.fang.com", "驻马店": "http://esf.zhumadian.fang.com", "黄石": "http://esf.huangshi.fang.com", "呼和浩特": "http://esf.nm.fang.com", "三门峡": "http://esf.sanmenxia.fang.com", "邹平": "http://esf.zouping.fang.com", "金湖": "http://esf.jinhu.fang.com", "神农架": "http://esf.shennongjia.fang.com", "瑞金": "http://esf.ruijin.fang.com", "长寿": "http://esf.changshou.fang.com", "洛宁": "http://esf.luoning.fang.com", "桂林": "http://esf.guilin.fang.com", "昌都": "http://esf.changdu.fang.com", "京山": "http://esf.hbjs.fang.com", "新建": "http://esf.xinjian.fang.com", "十堰": "http://esf.shiyan.fang.com", "张掖": "http://esf.zhangye.fang.com", "云阳": "http://esf.yunyang.fang.com", "滦县": "http://esf.luanxian.fang.com", "开县": "http://esf.kaixian.fang.com", "新泰": "http://esf.xintai.fang.com", "玉溪": "http://esf.yuxi.fang.com", "丰县": "http://esf.jsfx.fang.com", "乌兰察布": "http://esf.wlcb.fang.com", "桦甸": "http://esf.huadian.fang.com", "日喀则": "http://esf.rikaze.fang.com", "常德": "http://esf.changde.fang.com", "瑞安": "http://esf.ruian.fang.com", "临夏": "http://esf.linxia.fang.com", "惠东": "http://esf.huidong.fang.com", "昭通": "http://esf.zhaotong.fang.com", "德州": "http://esf.dz.fang.com", "平顶山": "http://esf.pingdingshan.fang.com", "嘉兴": "http://esf.jx.fang.com", "孟津": "http://esf.mengjin.fang.com", "恩平": "http://esf.enping.fang.com", "柳州": "http://esf.liuzhou.fang.com", "平潭": "http://esf.pingtan.fang.com", "眉山": "http://esf.meishan.fang.com", "嵩县": "http://esf.songxian.fang.com", "昌吉": "http://esf.changji.fang.com", "怀远": "http://esf.huaiyuan.fang.com", "阳曲": "http://esf.yangqu.fang.com", "曲靖": "http://esf.qujing.fang.com", "黄山": "http://esf.huangshan.fang.com", "周口": "http://esf.zhoukou.fang.com", "登封": "http://esf.dengfeng.fang.com", "岳阳": "http://esf.yueyang.fang.com", "揭阳": "http://esf.jieyang.fang.com", "南充": "http://esf.nanchong.fang.com", "贵港": "http://esf.guigang.fang.com", "萍乡": "http://esf.pingxiang.fang.com", "六盘水": "http://esf.lps.fang.com", "高陵": "http://esf.gaoling.fang.com", "安康": "http://esf.ankang.fang.com", "涪陵": "http://esf.fuling.fang.com", "奉节": "http://esf.fengjie.fang.com", "孝感": "http://esf.xiaogan.fang.com", "那曲": "http://esf.naqu.fang.com", "海盐": "http://esf.haiyan.fang.com", "安庆": "http://esf.anqing.fang.com", "吴忠": "http://esf.wuzhong.fang.com", "璧山": "http://esf.bishan.fang.com", "金华": "http://esf.jh.fang.com", "黔东南": "http://esf.qdn.fang.com", "连江": "http://esf.lianjiang.fang.com", "新安": "http://esf.hnxa.fang.com", "高邮": "http://esf.gaoyou.fang.com", "青岛": "http://esf.qd.fang.com"}
这个就是接受命令行参数的py文件
# coding=utf-8 from urllib import quote import requests, re, json, gevent, logging # import city_url.city_url_dictx from lxml import etree from city_url import city_url_dictx logging.basicConfig(level=logging.INFO, format=‘%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s‘, datefmt=‘%Y %H:%M:%S‘) class Fangtx(object): def __init__(self, cityname, projname,methodx): self.listx = [] self.href = city_url_dictx.get(cityname, None) self.projname = projname self.house_num = 0 self.methodx=methodx if self.href: self.url = self.href + ‘/house/kw%s‘ % (quote(projname.decode(‘utf8‘).encode(‘gbk‘))) self.page_url = self.href + ‘/house/‘ self.exsit_cityname = 1 self.get_pages() else: self.exsit_cityname = 0 self.listx.append(‘城市名不存在‘.decode(‘utf8‘)) logging.info(‘城市名不存在‘.decode(‘utf8‘)) def get_pages(self): if self.href: while (1): flag = 0 try: res = requests.get(self.url, timeout=30) break except Exception as e: logging.info(e) seletor = etree.HTML(res.content.decode(‘gbk‘)) # print res.content.decode(‘gbk‘) if u‘很抱歉,没有找到与“‘ in res.content.decode(‘gbk‘): logging.info(‘房源不存在‘.decode(‘utf8‘)) self.listx.append(‘房源不存在‘.decode(‘utf8‘)) else: self.pages = re.findall(‘\d+‘, seletor.xpath(‘//span[@class="txt"]/text()‘)[0])[0] logging.info((‘总页数:‘ + str(self.pages)).decode(‘utf8‘)) self.get_all_pages() def get_info(self, urlx): logging.info(urlx) while (1): flag = 0 try: res = requests.get(urlx, timeout=30) break except Exception as e: logging.info(str(e)) seletor = etree.HTML(res.content.decode(‘gbk‘)) all_dd = seletor.xpath(‘//dd[@class="info rel floatr"]‘) for dd in all_dd: self.house_num += 1 house_name = dd.xpath(‘./p/a/text()‘)[0] adress = dd.xpath(‘.//span[@class="iconAdress ml10 gray9"]/@title‘)[0] area = dd.xpath(‘.//div[@class="area alignR"]/p/text()‘)[0] money = dd.xpath(‘.//span[@class="price"]/text()‘)[0] + u‘万‘ price = dd.xpath(‘.//p[@class="danjia alignR mt5"]/text()‘)[0] house_dictx = { "house_name": house_name, "adress": adress, "area": area, "money": money, "price": price} self.listx.append(house_dictx) def get_all_pages(self): if self.methodx==0: from gevent import monkey from gevent.pool import Pool monkey.patch_all() gevent_pool = Pool(50) gevent_pool.map(self.get_info, [self.page_url + ‘i3‘ + str(p + 1) + ‘-kw‘ + quote(self.projname.decode(‘utf8‘).encode(‘gbk‘)) for p in range(int(self.pages))]) if self.methodx==1: try: import threadpool thread_pool = threadpool.ThreadPool(50) datax=[self.page_url+‘i3‘+str(p+1)+‘-kw‘+quote(self.projname.decode(‘utf8‘).encode(‘gbk‘)) for p in range(int(self.pages))] logging.info(datax) requestsx = threadpool.makeRequests(self.get_info,datax) [thread_pool.putRequest(req) for req in requestsx] thread_pool.wait() except Exception,e: logging.info(str(e)) if __name__ == "__main__": import sys, time #fangtx = Fangtx(‘深圳‘, ‘世界之窗‘) logging.info(‘参数1是‘+sys.argv[1].decode(‘gbk‘).encode(‘utf8‘)) logging.info(sys.argv[2]) fangtx=Fangtx(sys.argv[1].decode(‘gbk‘).encode(‘utf8‘),sys.argv[2].decode(‘gbk‘).encode(‘utf8‘),0) ##0使用协程,1使用线程 print [fangtx.house_num, fangtx.listx]
这个是django views中的一个函数,接受前端传入的城市名和房屋名称,然后把爬取的结果返回给前端
def get_need2(ask): import subprocess,os,json res = {} if ask.method == ‘GET‘ and ask.GET: city_name = ask.GET.get(‘city_name‘, ‘city_name lost‘).encode(‘utf-8‘) proj_name = ask.GET.get(‘proj_name‘, ‘proj_name lost‘).encode(‘utf-8‘) cmdx = r‘python fang/ershoufang.py %s %s‘ % (city_name, proj_name) print ‘cmdx是:‘,cmdx outx = subprocess.check_output(cmdx.decode(‘utf8‘).encode(‘gbk‘), shell=True) ###这个就是整个文章最关键的一句了,执行命令 #outx=os.popen(cmdx).readlines() print ‘---‘,outx,type(outx) #outx=‘[1,"abcd"]‘ num,listx=eval(outx) print num print listx res[‘res‘] = listx res[‘num‘]=num else: res[‘res‘]=[‘error‘, ‘error1‘] return JsonResponse(res)
这个是路由
#coding:utf-8 from django.conf.urls import url from views import * urlpatterns = [ url(r‘^eye/‘, eye), url(r‘^get_need$‘, get_need), url(r‘^get_need2$‘, get_need2), ]
运行效果图:
这个是cmd,可以看到“参数1是“”这几个字乱码了,因为用的是utf8编码,如果你把pycharm编辑器设置成了utf8,而cmd是gbk,那么总会有一个是必须要乱码的。
当然也可以在views函数中调用查二手房的类,但是里面有thread或者gevent django会报错。
做成这样的两个诀窍是,如果被调用的脚本需要打印信息来辅助调试,最好用log,不然这些信息也被控制台捕获了,得到的不是想要的信息。当然你也可以把你要返回的参数两边加特殊的独一无二的字符,这样捕获控制台后再用正则来提取出来,也是可以的。
多个参数的返回,最好用列表,那么此时控制台会捕获到一个列表形式的字符串,很容易转成列表方便取值,如果是乱七八糟的print出所有参数,不方便切割出来结果。
这样做更通用了,java里面的runtime也可以执行cmd。就不需要什么都来自己做。
然后要注意的是,win平台的cmd,不管是接受命令还是返回的信息都是gbk编码的,如果要传中文参数的一定要注意。或者你再传递之前用base64编码,然后接受后用base64解码,也不会遇到汉字编码的问题。
在程序中使用命令行的方式来调用py文件