1、有道翻译

'''
|-- 代码思路解析:
|-- 1、拿到网址首先查看network内Headers的:Request URL;User-Agent;From Data,这几个就是代码所需要的url地址和接口所需要传入的参数
|-- 2、编写代码:url,参数data放到一个字典内:data={},把From Data内的数据都拷贝到代码中并变成参数数组格式:data['smartresult']= 'dict'
|-- 3、由于有道有反爬虫的机制,所以需要做进一步的处理:
|-- 1)、未反爬虫处理前,报:{"errorcode":50}
|-- 2)、打开network,发送两次请求,查看From Data,发现只有三个地方数据有变化:i,salt,sign(i:需要进行翻译的字符串如:尘封最帅;salt:加密
|-- 用到的盐,这个是破解反爬虫的关键点;sign:签名字符串,也是破解反爬虫的关键点)
|-- 3)、查看网页源代码,查找所有js文件,我们找到fanyi.js,然后点击这个文件,跳转到源文件中,全部复制此代码到http://tool.chinaz.com/Tools/jsformat.aspx中,点击格式化
|-- 然后把格式化的代码复制出来,黏贴到subline内,然后搜索salt,找到相关代码:function(e, t) {
var n = e("./jquery-1.7");
e("./utils");
e("./md5");
var r = function(e) {
var t = n.md5(navigator.appVersion),
r = "" + (new Date).getTime(),
i = r + parseInt(10 * Math.random(), 10);
return {
ts: r,
bv: t,
salt: i,
sign: n.md5("fanyideskweb" + e + i + "p09@Bn{h02_BIEe]$P^nG")
}
};
|-- 4)、分析这段代码发现:sign由四个字符串拼接而成:fanyideskweb e i p09@Bn{h02_BIEe]$P^nG;
e :代表需要翻译的字符串
r :代表获取系统的时间戳
i :代表r的时间戳加上0-10的随机字符串
|-- 5)、通过以上4步,就知道了salt和sign的生成原理,这样就可以写python打代码来对接他的接口了
|-- 4、对数据进行编码处理
|-- 5、创建一个request对象,把url和data传进去,并且使用POST请求
|-- 6、打开这个请求
|-- 7、读取返回来的数据
|-- 8、把返回的json字符串解析成字典
|-- 9、不采用['translateResult'][0][0]['tgt']这种格式来翻译结果:{'type': 'ZH_CN2EN', 'errorCode': 0, 'elapsedTime': 0, 'translateResult': [[{'src': '尘封最帅', 'tgt': 'Dusty the most handsome'}]]}
[0] :代表去掉[[{'src': '尘封最帅', 'tgt': 'Dusty the most handsome'}]]}中第一个[]和第二个[0]
['tgt'] :代表直接打印输出:tgt的结果
|-- 10、采用['translateResult'][0][0]['tgt']这种格式翻译的结果:翻译的结果:Dusty the most handsome ''' import urllib.request
import urllib.parse
import json
import random
import time
import hashlib #用户输入翻译的内容
content = input('请输入需要翻译的内容:')
#连接url地址
url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
#发送给服务器请求的数据
data = {} #破解反爬虫的参数
u = 'fanyideskweb'
c = 'p09@Bn{h02_BIEe]$P^nG'
e =content
i =str(int(time.time()*1000)+random.randint(1,10))
sign = hashlib.md5((u+e+i+c).encode('utf-8')).hexdigest() #此部分数据来源于:FromData
data['i']= content
data['from']= 'AUTO'
data['to']= 'AUTO'
data['smartresult']= 'dict'
data['client']= 'fanyideskweb'
data['salt']= ''
data['sign']= 'ba81b8cb1c6dc64c253bf6d250cbc09b'
data['ts']= ''
data['bv']= '6d37ec4625573a83fa9ca0cb1e144ce5'
data['doctype']= 'json'
data['version']= '2.1'
data['keyfrom']= 'fanyi.web'
data['action']= 'FY_BY_CLICKBUTTION'
data['typoResult']= 'false' #对数据进行编码处理
data = urllib.parse.urlencode(data).encode('utf-8')
#创建一个request对象,把url和data传进去,并且使用POS请求
request = urllib.request.Request(url = url,data=data,method='POST')
#打开请求
reponsend =urllib.request.urlopen(request)
#读取返回来的数据
html = reponsend.read().decode('utf-8')
#把返回来的json字符串解析成字典
line = json.loads(html)
#print(line)
#获取翻译结果
print('翻译的结果:%s'%(line['translateResult'][0][0]['tgt'])) 参考文档:https://blog.csdn.net/ISxiancai/article/details/79349184
     https://blog.csdn.net/nunchakushuang/article/details/75294947

2、urlopen()方法的timeout参数用于设置什么?

timeout参数用于设置连接的超时时间,单位是秒

3、如何从urlopen()返回的对象中获取http的状态码

reponse = urllib.request.urlopen(url)
code = reponse.getcode()

4、客户端合服务端之间的请求-响应,最常用的两种方式

get和post

5、User-Agent属性通常是记录什么信息、

普通浏览器通过该内容像访问网站提供你所使用的浏览器类型,操作系统,浏览器内核信息等

6、使用字符串的什么方法将其他编码转换成Unicode编码?

decode。   decode的作用是将其他编码的字符串转换成unicode编码, 相反,encode的作用是将unicode编码转换成其他编码的字符串

7、json是什么

用字符串把python的数据结构封装起来,便于存储和使用

#把返回来的json字符串解析成字典
line = json.loads(html)

8、配合EasyGui,给下载一只猫的代码增加互动

*  让用户输入尺寸

*  如果用户不输入尺寸,那么默认按宽400,高600下载猫

*  让用户指定位置保存

import easygui as g
import urllib.request def main():
#用户自己选择下载的猫的尺寸
title = '下载一只猫'
msg = '填写下载猫的尺寸'
fieldsnames = ['宽','高']
fieldsvalues = []
size = width,height = 400,600
fieldsvalues = g.multenterbox(msg,title,fieldsnames,size) #判断输入宽和高为空,非整数时的容错
while 1:
if fieldsvalues == None:
break
errmsg = "" try:
width = int(fieldsvalues[0].strip())
except:
errmsg += '宽度必须为整数' try:
height = int(fieldsvalues[1].strip())
except:
errmsg += '高度必须为整数' if errmsg == "":
break fieldsvalues = g.multenterbox(errmsg,title,fieldsnames,fieldsvalues) #爬取猫的网站
url = "http://placekitten.com/g/%d/%d" %(width,height)
reponse = urllib.request.urlopen(url)
cat_img = reponse.read() filepath = g.diropenbox("请选择存放猫的文件夹") #命名下载的图片文件名称
if filepath:
filename = '%s/cat_%d*%d.jpg'%(filepath,width,height)
else:
filename = 'cat_%d*%d.jpg'%(width,height) #写入文件
with open(filename,'wb') as f:
f.write(cat_img) if __name__ == '__main__':
main()

【python54--爬虫2】的更多相关文章

  1. 设计爬虫Hawk背后的故事

    本文写于圣诞节北京下午慵懒的午后.本文偏技术向,不过应该大部分人能看懂. 五年之痒 2016年,能记入个人年终总结的事情没几件,其中一个便是开源了Hawk.我花不少时间优化和推广它,得到的评价还算比较 ...

  2. Scrapy框架爬虫初探——中关村在线手机参数数据爬取

    关于Scrapy如何安装部署的文章已经相当多了,但是网上实战的例子还不是很多,近来正好在学习该爬虫框架,就简单写了个Spider Demo来实践.作为硬件数码控,我选择了经常光顾的中关村在线的手机页面 ...

  3. Python 爬虫模拟登陆知乎

    在之前写过一篇使用python爬虫爬取电影天堂资源的博客,重点是如何解析页面和提高爬虫的效率.由于电影天堂上的资源获取权限是所有人都一样的,所以不需要进行登录验证操作,写完那篇文章后又花了些时间研究了 ...

  4. scrapy爬虫docker部署

    spider_docker 接我上篇博客,为爬虫引用创建container,包括的模块:scrapy, mongo, celery, rabbitmq,连接https://github.com/Liu ...

  5. scrapy 知乎用户信息爬虫

    zhihu_spider 此项目的功能是爬取知乎用户信息以及人际拓扑关系,爬虫框架使用scrapy,数据存储使用mongo,下载这些数据感觉也没什么用,就当为大家学习scrapy提供一个例子吧.代码地 ...

  6. 120项改进:开源超级爬虫Hawk 2.0 重磅发布!

    沙漠君在历时半年,修改无数bug,更新一票新功能后,在今天隆重推出最新改进的超级爬虫Hawk 2.0! 啥?你不知道Hawk干吗用的? 这是采集数据的挖掘机,网络猎杀的重狙!半年多以前,沙漠君写了一篇 ...

  7. Python爬虫小白入门(四)PhatomJS+Selenium第一篇

    一.前言 在上一篇博文中,我们的爬虫面临着一个问题,在爬取Unsplash网站的时候,由于网站是下拉刷新,并没有分页.所以不能够通过页码获取页面的url来分别发送网络请求.我也尝试了其他方式,比如下拉 ...

  8. Python多线程爬虫爬取电影天堂资源

    最近花些时间学习了一下Python,并写了一个多线程的爬虫程序来获取电影天堂上资源的迅雷下载地址,代码已经上传到GitHub上了,需要的同学可以自行下载.刚开始学习python希望可以获得宝贵的意见. ...

  9. QQ空间动态爬虫

    作者:虚静 链接:https://zhuanlan.zhihu.com/p/24656161 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 先说明几件事: 题目的意 ...

  10. 让你从零开始学会写爬虫的5个教程(Python)

    写爬虫总是非常吸引IT学习者,毕竟光听起来就很酷炫极客,我也知道很多人学完基础知识之后,第一个项目开发就是自己写一个爬虫玩玩. 其实懂了之后,写个爬虫脚本是很简单的,但是对于新手来说却并不是那么容易. ...

随机推荐

  1. vue中使用kindeditor富文本编辑器

    1.去官网下载kindeditor 2.将其放在一个名为kindeditor的文件夹里,并且将它放在vue里的static文件夹下 3.创建kindeditor.vue <template> ...

  2. Eclipse集成Hibernate操作Sqlserver实例

    Eclipse搭建Hibernate开发环境,使用的数据库是Sqlserver2008 1.需要成功安装Eclipse,如果没有安装可以上网查资料. 2.Eclipse安装成功后,点击Help--&g ...

  3. Struts上传文件

    Struts上传文件分为两个步骤: 1). 首先将客户端上传的文件保存到Struts.multipart.saveDir键所指定的目录中,如果该键所对应的目录不存在,那么就保存到javax.servl ...

  4. javascript 面向对象之路.2 - 小蜜蜂

    接着上篇文章继续. 要实现上篇中gif图片的效果, 我们要写js, 算法并不是很复杂, 本次也仅仅展示了实现功能的代码, 并没有从面向对象的角度去构思或重构代码. 这里, 我们定义了一些变量, 用来定 ...

  5. MYSQLi数据访问分页查询

    <?php //分页工具 直接加载使用 /** file: page.class.php 完美分页类 Page */ class Page { private $total; //数据表中总记录 ...

  6. windows下golang环境搭建

    (1)golang安装配置. 下载地址:https://www.golangtc.com/download 解压后直接配置系统环境变量path,加上go.exe所在文件的路径即可. 配置系统环境变量G ...

  7. 3.用Thead子类及Runnable接口类实现车站购票的一个场景(static关键字)

    如上图所示,我们这里模拟一下去车站买票的情形:这里有3个柜台同时售票,总共是1000张票,这三个柜台同时买票,但是只能一个柜台卖同一张票,也就是说1号票卖了之后我们就只能买2号票,2号票卖了之后我们只 ...

  8. uva 10163 Storage Keepers

    题意: 有n个仓库,m个人,一个仓库只能由一个人托管,每个人可以托管多个仓库. 每个人有一个能力值a,如果说他托管了k个仓库,那么这些仓库的安全值都是a/k. 雇佣一个人的花费也是a. 如果一个仓库没 ...

  9. Presto上使用SQL遇到的一些坑

    本文转载自:https://segmentfault.com/a/1190000013120454?utm_source=tag-newest 最近换了新工作,在数据处理方面,公司是用Presto连接 ...

  10. mysql安装使用

    linux系统 mysql-5.7.14-linux.zip部署包支持在CentOS 6.x/7.x 服务器硬盘大小要求 a) /data/mysql_data  如果存在该独立分区,要求该分区 &g ...