设为首页 收藏本站
查看: 662|回复: 0

[经验分享] python与web

[复制链接]

尚未签到

发表于 2017-4-23 13:16:51 | 显示全部楼层 |阅读模式
  如果说java是建造高楼的砖石,那么python就是一支素质良好的施工队。
  有一天,我苦于在ubuntu下没有找到词典应用,不得不打开网页,诸如有道词典这样的,然后输入单词。
  凑合可用。但是网页内容太多,而且切换不易。于是决定用python解析这些网页,提取翻译。
  首先,我们需要一个类似httpclient的工具,相当于浏览器的交流工具,然后还要一个html解析器。
  当然我们不许要自己动手建造,只需要import  httplib, import urllib,import sgmllib 即可。
  好吧,来看我们是如何从有道词典抓数据的。

#!/usr/bin/evn python
# -*- coding: utf-8 -*-
import httplib
import urllib
import sys
from sgmllib import SGMLParser
class GetTrans(SGMLParser):
def reset(self):
self.text = []
self.flag = False
self.getdata = False
self.layer = 0
SGMLParser.reset(self)
def start_div(self, attrs):
if self.flag == True:
self.layer += 1
return
for k, v in attrs:
if  (k == 'id' and v =='phrsListTab') or (k == 'class' and v == 'phonetic'):
self.flag = True
return
def end_div(self):
if self.layer == 0:
self.flag = False
if self.flag == True:
self.layer -= 1
def start_ul(self, attrs):
if self.flag == False:
return
self.getdata = True
def end_ul(self):
if self.getdata:
self.getdata = False
def start_span(self,attrs):
if self.flag == False:
return
self.getdata = True
def end_span(self):
if self.getdata:
self.getdata = False
def handle_data(self, text):
if self.getdata:
self.text.append(text)
def printText(self):
for i in self.text:
print i
def sendhttp(key):
data = urllib.urlencode({'q':key,'le':'eng','from':'dict.index'})
headers = {"Content-type":"application/x-www-form-urlencoded","Accept":"text/plain"}
conn = httplib.HTTPConnection("dict.youdao.com");
conn.request('POST', '/search', data, headers)
httpres = conn.getresponse()
t = GetTrans()
t.feed(httpres.read())
t.printText()
conn.close()
if __name__ == '__main__':
while True:
print "please input word:\n"
word = raw_input()
sendhttp(word)
if word == 'quit':
break
print 'bye'

  代码很少,最多的是如何解析html,这里使用的解析类似xml解析中的节点方法,定义遇到html标签时的处理方法,例如,如果要处理 <body>那么,定义这样的函数 start_body 当然当处理</body>时,需要 end_body这样的函数。我们只需定义关心的标签。这里需要注意的是标签的套嵌,我们使用layer来判断。
  接下来就是模拟一个http的请求,构造一个url请求,然后返回结果。
  httplib 还有更强大的httplib2。有心的同学可以去研究。这个简易词典已经能工作了。你可以根据自己的需求修改代码。快来动手吧。

please input word:
supposedly
supposedly

[sə'pəʊzɪdlɪ]

[sə'pozɪdli]

adv. 可能;按照推测;恐怕

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-368200-1-1.html 上篇帖子: python扫盲0 下篇帖子: Python ConfigParse使用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表