赞
踩
学习爬虫也有一段时间了,但始终感觉自己脑袋空空,好像会了不少,又好像啥也不会。后经高人指点,顿觉自己在学习方法上存在问题!遂决定以后把自己的所学、所见、所思完整的记录下来,既能做以后回顾之用,又能启发后来人,岂不妙哉。好了,废话不多说,让我们进入正题。
语言:万能的python
操作系统:windows7
IDE:pycharm
解释器:python 3.7.3
文本工具:sublime text
浏览器:Chrome
1.urllib库,关于python3的urllib库的使用可以参考下面链接:
点击我进行传送
2.json库,我们需要用到json.loads()方法将json数据转换为Python对应的数据(本文中主要是转换成字典和列表的形式),与其对应的是json.dumps()方法,本文不涉及就不多说了。
3.python的一些其他库:random库、time库、hashlib库,具体用途后面会说。
俗话说,知己知彼,百战不殆。我们只有了解了有道翻译的运行机制,才能利用爬虫在其中获取我们想要的数据。打开浏览器(这里用的是Chrome),进入浏览器的翻译页面,在浏览器页面点击鼠标右键进入检查选项:[图1]
选择Network[图2]
我们要通过浏览器自带的抓包工具来抓取一些数据包,搞明白在按下翻译按钮后,浏览器和有道翻译的服务器之间做了怎样的交互。下面在文本框内输入“hello”,看看抓到了哪些包:[图3]
先看第一项,点击第一项然后观察右侧:[图4]
可以看到Request Method这一项为post,通常情况浏览器大多使用post和get方式向服务器发送请求(当然还有其他方式)。其中post请求的安全性比get请求更高,至于二者的区别不在本文范围内,这里有道翻译使用的是post请求方式(post请求通常可以传输较大的数据量,而则get不能)。继续往下翻:[图5]
这里的Form Data就是浏览器向有道翻译的服务器发送的内容,可以看到,i值对应的正是我们输入的要翻译的文字,这个表单正是浏览器向服务器发送post请求时提交的数据。再点击与上方Headers处在同一行的Response,这一项是服务器给浏览器的响应(回复):[图6]
可以看到这是一个json数据,其中键“tgt”对应的值正是我们想要的翻译结果,键“src”对应的是我们输入的待翻译文字。至此,由以上分析我们可以大致知道,在我们点击“翻译”按钮以后,浏览器向有道翻译的服务器以post请求的方式提交了数据(数据就是之前Form Data里的内容),然后浏览器给我们回复了一个json的数据,其中就包含了翻译的结果。现在我们只要利用python模拟浏览器的行为向服务器发送请求,我们接收到浏览器的响应(回复)的json数据之后再分析、提取出翻译的结果即可。那么我们应该向哪里发送请求呢,还记得图4吗,在图4的Request URL一项中对应的值正是数据提交的地址我们只需将数据发送到这里即可。
from urllib import request, parse
def translateSpider(e):
url = "http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule"
headers = { # 构造请
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。