Board logo

标题: [问题求助] 【已解决】想改进一个别人的有点词典的爬取程序,不懂Python [打印本页]

作者: 949825667@qq.co    时间: 2016-8-22 13:20     标题: 【已解决】想改进一个别人的有点词典的爬取程序,不懂Python

本帖最后由 949825667@qq.co 于 2016-8-30 16:45 编辑
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. # @Date    : 2014-04-03 21:12:16
  4. # @Function: 有道翻译命令行版
  5. # @Author  : BeginMan
  6. import os
  7. import sys
  8. import urllib
  9. import urllib2
  10. reload(sys)
  11. sys.setdefaultencoding("utf-8")
  12. import simplejson as json
  13. import platform
  14. import datetime
  15. API_KEY = '1542783714'
  16. KEYFORM = 'dyzwordyoudao'
  17.    
  18. def GetTranslate(txt):
  19.     url = 'http://fanyi.youdao.com/openapi.do'
  20.     data = {
  21.     'keyfrom': KEYFORM,
  22.     'key': API_KEY,
  23.     'type': 'data',
  24.     'doctype': 'json',
  25.     'version': 1.1,
  26.     'q': txt
  27.     }
  28.     data = urllib.urlencode(data)
  29.     url = url+'?'+data
  30.     req = urllib2.Request(url)
  31.     response = urllib2.urlopen(req)
  32.     result = json.loads(response.read())
  33.     return result
  34.    
  35. def Sjson(json_data):
  36.     query = json_data.get('query','')               # 查询的文朿
  37.     translation = json_data.get('translation','')   # 翻译
  38.     basic = json_data.get('basic','')               # basic 列表
  39.     sequence = json_data.get('web',[])              # 短语列表
  40.     phonetic,explains_txt,seq_txt,log_word_explains = '','','',''
  41.    
  42.     # 更多释义
  43.     if basic:
  44.         phonetic = basic.get('phonetic','')         # 音标
  45.         explains = basic.get('explains',[])         # 更多释义 列表
  46.         for obj in explains:
  47.             explains_txt += obj+'\n'
  48.             log_word_explains += obj+','   
  49.     # 句子解析
  50.     if sequence:
  51.         for obj in sequence:
  52.             seq_txt += obj['key']+'\n'
  53.             values = ''
  54.             for i in obj['value']:
  55.                 values += i+','
  56.             seq_txt += values+'\n'
  57.         
  58.     print_format = '*'*40+'\n'
  59.     print_format += u' %s [%s]\n' %(query,phonetic)   
  60.     print_format += explains_txt
  61.     print_format += '-'*20+'\n'+seq_txt
  62.     print_format += '*'*40+'\n'
  63. #print print_format
  64.     choices = raw_input(u'y or n')
  65.     if choices in ['y','Y']:
  66.         filepath = r'/home/beginman/pyword/%s.xml' %datetime.date.today()
  67.         if (platform.system()).lower() == 'windows':
  68.             filepath = r'C:\Python27\%s.xml' %datetime.date.today()
  69.         fp = open(filepath,'a+')
  70.         file = fp.readlines()
  71.         if not file:
  72.             fp.write('<wordbook>\n')
  73.             fp.write(u"""    <item>\n    <word>%s</word>\n    <trans><![CDATA[%s]]></trans>\n    <phonetic><![CDATA[[%s]]]></phonetic>\n    <tags>%s</tags>\n    <progress>1</progress>\n    </item>\n\n""" %(query,log_word_explains,phonetic,datetime.date.today()))
  74.         fp.close()
  75.         print u'success.'
  76.         
  77. def main():
  78.     f = open('1.txt','r')
  79.     while True:
  80.         line = f.readline()
  81.         if line:
  82.             txt = line
  83.             Sjson(GetTranslate(txt))
  84. if __name__ == '__main__':
  85.     main()
复制代码

作者: 949825667@qq.co    时间: 2016-8-22 13:21

上面的代码是我改了以后的,输入变成了从文本输入!但是输出的结果不会追加!
作者: 949825667@qq.co    时间: 2016-8-22 13:22

<wordbook>
    <item>
    <word>dentistry</word>
    <trans><![CDATA[n. 牙科学;牙医业,]]></trans>
    <phonetic><![CDATA[['dentɪstrɪ]]]></phonetic>
    <tags>2016-08-22</tags>
    <progress>1</progress>
    </item>
输出结果是这样的,按理说会不停的追加的!我没太看懂他的代码,还有怎么样才能取消他那个y or n的判断?
作者: 949825667@qq.co    时间: 2016-8-22 13:39

我自己改了一下,可以累加输出了,但是怎么取消判断啊!我才看了几章Python
作者: 949825667@qq.co    时间: 2016-8-22 13:47

自己改了一下,取消了判断
作者: 949825667@qq.co    时间: 2016-8-22 15:15

我又厚颜无耻的来了,怎么让这个程序每处理1000个单词就休息一个小时呢?:dizzy::dizzy:能不能结合批处理呢
作者: pcl_test    时间: 2016-8-22 15:47

举个栗子
  1. #每输出两个字母延时2秒
  2. import time
  3. j=0
  4. for i in ['a','b','c','d','e','f','g','h','i','j','k','l','m','n']:
  5.     print i
  6.     j+=1
  7.     if j%2==0:time.sleep(2)
复制代码

作者: 949825667    时间: 2016-8-22 21:18

回复 7# pcl_test


    多谢版主大人。。。我查了好久解决了,忘记回帖说一下了!阿里嘎多!
作者: 523066680    时间: 2016-8-23 09:21

本帖最后由 523066680 于 2016-8-23 09:26 编辑

有道还是有点?
哦,这个是在线爬取的。


我也做过一个在线查询的,Perl+终端版
http://bbs.bathome.net/thread-36111-1-1.html

有道离线字典拆解思路 以及 单独制作的查询工具
http://bbs.bathome.net/thread-40665-1-1.html
http://code-by.org/viewtopic.php?f=17&t=12
作者: 949825667@qq.co    时间: 2016-8-23 09:49

回复 9# 523066680


    多谢多谢,请问版主知道怎么用正则匹配带连字符的单词么?比如seven-day
作者: 523066680    时间: 2016-8-23 10:00

回复 10# 949825667@qq.co

好像直接匹配没什么问题啊(perl
  1. $abc = "---[seven-day]---";
  2. $abc =~ /seven-day/;
  3. print $&;
复制代码
seven-day

实在不行在  - 前面加上 \ 咯
  1. $abc = "---[seven-day]---";
  2. $abc =~ /seven\-day/;
  3. print $&;
复制代码

作者: 949825667@qq.co    时间: 2016-8-23 10:12

回复 11# 523066680


    通用型的- -,所有加连字符的单词!不过还是谢谢,暂时不考虑这个问题了! :victory: :victory:




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2