使用python爬取有道首页做一个翻译程序

algorain

今天想写一篇关于python爬虫的博文,正好这几天有几百个单词要翻译,而翻译软件我最常用的就是有道,去有道首页抓个包看一下,是http协议而且还是get请求这就好办了,使用时要注意是有道http://www.youdao.com/, 不是有道翻译,有道翻译采用的是post请求,这次我们使用有道首页,下面是我抓到的包分析的。

箭头里标注的就是获取到的,由于是get请求,很简单,不需要其他什么参数,只看content里的内容即可。下面开始写python程序,既然发现是http协议,那我自己有urllib2库去抓就好,我使用的是python2.7,IDE为pycharm,下面是代码,分两段函数,不喜欢把所有代码写到一起,写成函数使用的时候直接调用就行,不需要到处找,到处注释掉。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#-*- coding=utf8 -*-
import urllib2
def get_html(url): #获取网页内容
result = urllib2.urlopen(url)
return result.read()
def save_file(text,filename): #保存到文件
f = open(filename, 'w')
f.write(text)
f.close()
if __name__=='__main__':
url = 'http://www.youdao.com/w/result/#keyfrom=dict2.top'
save_file(get_html(url), 'thefile.txt') #将得到的网页直接存到文件里


然后到你这个执行的项目的文件夹下找thefile.txt这个文件,是执行的这个程序的文件夹里。打开可以看到果然获取了全部网页内容。

但是我想做的是一个翻译程序,需要获取具体的意思,这时候就要用到正则表达式来提取关键内容了,现在开始分析我们所需要的其实就是下面这个框里的内容

其实就在网页这里,包含在一个ul下面

…..写了一会完全提取不出来这对ul里的内容,网页里的ul太多,没有明显的特征,只好弃用正则表达式,用我的另外一个神器,BeautifulSoup库,简直就是万能的提取库。没有安装的可以去官网下载,安装方式参考我下面的这篇博文。

》》》这是官网下载地址 》》》强大的BeautifulSoup库

这是我提取出来的结果,直接就找到了,而且显示的还是中文,用正则表达式一般都会把中文给编码以后再显示,因为我们需要的ul是在第二个所,以提取出去全部内容以后直接显示第二个。

现在问题又来了,如何显示li里面的内容,我想用了正则表达式,但提取出来的是编码以后的中文,只能继续使用Beautifulsoup这个神器,具体研究的过程不再详细阐述,大家看代码就可以。这样代码基本完成,但是不方便使用啊,url是可以变得,于是我弄一个变量放进去,在给一个提示框,把每次要查的单词输入即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#-*- coding=utf8 -*-
import urllib2
import re
from bs4 import BeautifulSoup
def get_html(url): #获取网页内容
result = urllib2.urlopen(url)
return result.read()
def save_file(text,filename): #保存到文件
f = open(filename, 'ab')
f.write(text)
f.close()
def open_file(filename): #打开文件
f = open(filename,'r')
text = f.read()
f.close()
return text
def soup_html(text,word): # 使用beautifulsoup提取的函数
soup = BeautifulSoup(text)
result = soup.find_all('ul') #这是第一次提取出来的ul结果,需要进行下一步提取
ul_list = str(result[1]) # beautifulsoup要求使用字符串类型,所以先转换一下
soup_ul = BeautifulSoup(ul_list) #建立第二个提取实例
for line in soup_ul.stripped_strings: #对获取到的ul里的内容进行提取
print line
def manage(): #封装所有函数的main
word = raw_input('请输入要翻译的单词.....')
url = 'http://www.youdao.com/w/'+word+'/#keyfrom=dict2.top'
soup_html(get_html(url),word)
if __name__=='__main__':
manage()

最后,这次的爬取比较简单,是http和get请求,没有参数和头部什么的要写,只是简单的爬取内容,然后再去分析提取,有兴趣的可以继续研究,这个可以用于大量单词的查找,代码是没有问题的,如果有疑问可与我联系。

  • Title: 使用python爬取有道首页做一个翻译程序
  • Author: algorain
  • Created at: 2017-02-05 11:35:44
  • Updated at: 2023-05-14 21:39:50
  • Link: http://www.rain1024.com/2017/02/05/python-article23/
  • License: This work is licensed under CC BY-NC-SA 4.0.
 Comments
On this page
使用python爬取有道首页做一个翻译程序