使用python2爬取有道翻译

爬虫的核心思想:模拟浏览器正常访问服务器,一般情况只要浏览器能访问的,都可以爬,如果被反爬,则考虑反复测试添加Request Header数据,知道可以爬取为止。

反爬思路目前知道的有:User-Agent,Cookie,Referer,访问速度,验证码,用户登录及前端js代码验证等。本例遇到js验证 User-Agent Referer Cookie共计4种反爬机制。

关键部分是,参数headers和data的构造,headers要进行反复测试,data数据里面的变量查找思路。

参考资料:

用Python破解有道翻译反爬虫机制 https://blog.csdn.net/nunchakushuang/article/details/75294947

python破解网易反爬虫机制 https://blog.csdn.net/luosai19910103/article/details/79522067

一些反爬机制 https://blog.csdn.net/javakklam/article/details/79841901

有道翻译页面,左边输入要翻译的字符串,右边会自动输出翻译的结果,如下图

经过多次输入字符测试,发现页面无刷新,猜测可能使用ajax,然后进行抓包分析,发现的确使用ajax传输数据

代码如下:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import urllib
import urllib2
import time
import hashlib

url = ‘http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule‘
keyword = raw_input(‘请输入要翻译的字符串: ‘)

# headers作用模拟浏览器
headers = {
# "Accept": "application/json, text/javascript, */*; q=0.01",
# "Connection": "keep-alive",
# "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
"Cookie": "你的浏览器cookie值",
"Referer": "http://fanyi.youdao.com/",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36",
# "X-Requested-With": "XMLHttpRequest",
}

salt = str(int(time.time()*1000))

m = hashlib.md5()
str = "fanyideskweb" + keyword + salt + "ebSeFb%=XZ%T[KZ)c(sy!"
m.update(str)
sign = m.hexdigest().encode(‘utf-8‘)
print(sign)

# data为post请求数据
data = {
    "i":keyword,
    "from":"AUTO",
    "to":"AUTO",
    "smartresult":"dict",
    "client":"fanyideskweb",
    "salt":salt,
    "sign":sign,
    "doctype":"json",
    "version":"2.1",
    "keyfrom":"fanyi.web",
    "action":"FY_BY_REALTIME",
    "typoResult":"false"
}

# 对post上传的数据进行urlencode编码
data = urllib.urlencode(data)

# urllib 仅可以接受URL,不能创建 Request 类实例,也不能设置参数headers ,但可以对url进行编码,而urllib2不能编码,所以经常一起使用
# 而urllib2.urlopen(url)不能构造复杂的request,所以要使用urllib2.Request(url,data=data,headers=headers),2者都是有data参数时表示post提交数据,headers的值为模仿浏览器请求头里面的的数据,格式为字典,让服务器接受的数据看起来像使用浏览器访问。
request = urllib2.Request(url,data=data,headers=headers)
response = urllib2.urlopen(request)
print(response.read())

代码测试,如下图

原文地址:https://www.cnblogs.com/silence-cc/p/9193344.html

时间: 2024-10-08 11:46:56

使用python2爬取有道翻译的相关文章

python爬取有道翻译

1.准备工作 先来到有道在线翻译的界面http://fanyi.youdao.com/ F12 审查元素 ->选Network一栏,然后F5刷新 (如果看不到Method一栏,右键Name栏,选中Method) 输入文字自动翻译后发现Method一栏有GET还有POST:GET是指从服务器请求和获得数据,POST是向指定服务器提交被处理的数据. 随便打开一个POST,找到preview可以看到我们输入的“我爱你一生一世”数据,可以证明post的提交数据的 下面分析一下Headers各个字段的意义

Python2爬取学生名单

背景: 学校的网站可以根据学号查学生姓名和成绩,所以我希望通过Python的爬虫得到年级所有同学的学号与姓名对应表. 实现: 首先需要算出所有学生的学号以方便查询.接下来要把学号和考试场次包装成待会要填入的信息,这可以用urllib模块里的函数urlencode完成.之后要访问网站,先用urllib2模块里的Request函数获得访问令牌(其实我也不知道是什么),然后用urlopen函数把需要填入的信息和令牌传进去就可以得到查询结果网页的源代码了! 此后是分析源代码环节,经过分析后发现所需要的姓

py爬取英文文档学习单词

最近开始看一些整本整本的英文典籍,虽然能看个大概,但是作为四级都没过的我来说还是有些吃力,总还有一部分很关键的单词影响我对句子的理解,因为看的是纸质的,所以查询也很不方便,于是想来个突击,我想把程序单词收拢在一起学习一下,希望这样的更有针对性一些,因为你想,arbitrary (任意的,武断的)这样的单词不太可能会出现在技术文档上,学了这样的单词对理解英文技术文档没有太大帮助.所以今天花了几个小时研究了一下,发现是很可行的,实现也不算难.步骤主要是以下几点,第一:先搞定翻译接口.翻译的来源分为接

爬虫新手学习2-爬虫进阶(urllib和urllib2 的区别、url转码、爬虫GET提交实例、批量爬取贴吧数据、fidder软件安装、有道翻译POST实例、豆瓣ajax数据获取)

爬虫新手学习1-爬虫基础 1.urllib和urllib2区别实例 urllib和urllib2都是接受URL请求相关模块,但是提供了不同的功能,两个最显著的不同如下: urllib可以接受URL,不能创建设置headers的Request类实例,urlib2可以. url转码 https://www.baidu.com/s?wd=%E5%AD%A6%E7%A5%9E python字符集解码加码过程: 2.爬虫GET提交实例 #coding:utf-8 import urllib #负责url编

python爬取百度翻译返回:{'error': 997, 'from': 'zh', 'to': 'en', 'query 问题

解决办法: 修改url为手机版的地址:http://fanyi.baidu.com/basetrans User-Agent也用手机版的 测试代码: # -*- coding: utf-8 -*- """ ------------------------------------------------- File Name: requestsGet Description : 爬取在线翻译数据s Author : 神秘藏宝室 date: 2018-04-17 --------

【转载】Python2爬虫之爬取某一路径的所有html文件

1 # -*- coding: UTF-8 -*- 2 import re 3 import urllib2 4 5 from collections import deque 6 7 # 保存文件的后缀 8 SUFFIX='.html' 9 # 提取文章标题的正则表达式 10 REX_TITLE=r'<title>(.*?)</title>' 11 # 提取所需链接的正则表达式 12 REX_URL=r'/jdbc/(.+?).html' 13 # 种子url,从这个url开始爬

python2.7 爬虫_爬取小说盗墓笔记章节及URL并导入MySQL数据库_20161201

1.爬取页面 http://www.quanshu.net/book/9/9055/ 2.用到模块urllib(网页下载),re正则匹配取得title及titleurl,urlparse(拼接完整url),MySQLdb(导入MySQL) 数据库 3.for 循环遍历列表 取得盗墓笔记章节title 和 titleurl 4.try except 异常处理 5.python 代码 #-*-coding: utf-8 -*- import urllib import re import urlpa

爬虫:爬取海词的翻译内容

在爬取海词的时候遇到了一个问题,在异步加载的时候,需要一个t值,但是这个t值是js加载出来的,直接拼接的,我们无法从网页中得到:  当在搜索框输入单词的时候:你在干嘛 替换下图中的page的值就能达到翻页的目的: 那么当前的目的就是要能够找到这段js代码,同时获取对应输入的t的值,来重新组合url 真正的url只需要如下内容: 我提前把关键字和t都处理了,写成了字典的形式, key:你在干嘛  ff[key]:WuqarCRs {“你好”:“WuqarCRs”} #提前处理成了这种,方便提取 u

python爬有道翻译

在有道翻译页面中打开开发者工具,在Headers板块找到Request URL以及相应的data. import urllib.request import urllib.parse import json content=input('请输入需要翻译的内容:') #_o要去掉,否则会出先error_code:50的报错 url='http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule' data={} #开发者工具