python爬取有道翻譯

python爬蟲爬取有道翻譯教程

編寫環境

為了寶寶們能夠正確讀懂本教程,在正式開始前,寶寶們需要搭建的環境如下:

  1. 連接互聯網的win10電腦,(win7也可以)
  2. Google瀏覽器(版本無要求)
  3. Python(版本3就可以了),如果沒有安裝的小伙伴可以參考python安裝以及版本檢測
  4. requests庫(版本沒啥要求),沒有安裝的小伙伴可以參考python request庫安裝

需求分析

我們本次要爬取的網頁是:有道翻譯
在這里插入圖片描述
這時,按下F12鍵,調出Google瀏覽器的開發者工具
在這里插入圖片描述
現在里面沒有內容,別慌,點擊NetWork選項卡后,再次點擊翻譯按鈕
在這里插入圖片描述
這時,寶寶們會發現下面多了幾條網絡請求,我們點擊第一個請求
在這里插入圖片描述
在右邊有三個點的按鈕,可以切換開發者工具的顯示狀態,我們點擊第一個,讓它單獨分出一頁顯示出來,以便于觀察
在這里插入圖片描述
在Headers選項卡中,可以查看這次請求的URL、headers參數
在這里插入圖片描述
往下面翻,還有data的參數值
在這里插入圖片描述
我們點擊Response來查看這次請求的響應,也就是服務器給我們返回的結果,經過和網頁中翻譯內容的比較,可以確定,這個數據就是我們需要爬取的內容.
在這里插入圖片描述
經過我們的多次改變翻譯內容,比較請求信息,我們可以發現:

在data中有三個數據是加密的變量,其中i為我們輸入要翻譯的字符串,而salt、sign和ts是加密的變值.所以我們猜測這個值是由JavaScript生成的,這里我們可以在頁面中右鍵->查看網頁源代碼
通過Ctrl+F搜索js,找到js文件
在這里插入圖片描述
通過向下繼續搜索,我們發現了三個以js結尾的文件
在這里插入圖片描述
依次點擊進入后進行搜索,最終確為
http://shared.ydstatic.com/fanyi/newweb/v1.0.18/scripts/newweb/fanyi.min.js
是進行加密的JavaScript文件
在這里插入圖片描述
我們將這個JavaScript文件,按下Ctrl+A全選,Ctrl+C進行復制,但是這個代碼是壓縮格式,不利于我們的閱讀
這里小編給給大家提供了一個js格式化的網站在線代碼格式化
粘貼進來后,即可復制格式化好的代碼
在這里插入圖片描述
下面在PyCharm中新建一個js文件,將格式化好的js代碼粘貼進來,PyCharm的安裝可以參考PyCharm的安裝以及破解

將代碼粘貼進來后,按下Ctrl+F可以在代碼中進行搜索,輸入salt,逐個查看比對
在這里插入圖片描述
但是通過我們的觀察,瀏覽器中的data參數,版本是2.1
在這里插入圖片描述
說明我們找的不對,繼續向下搜索,只到查找到version : 2.1,這里的salt即為data中的參數
在這里插入圖片描述
我們發現salt、sign和ts都的r的屬性,下面我們搜索一下r是如何定義的
通過搜索,我們找到了這里
在這里插入圖片描述
根據代碼可以看出:

r = "" + (new Date).getTime()

所以ts就是當前的時間戳(這里要注意:JavaScript中的時間是以毫秒為單位的,所以在下面我們生成的時候注意單位的換算)

i = r + parseInt(10 * Math.random(), 10);

salt即為r加上一個在0-10之間的隨機數

sign: n.md5("fanyideskweb" + e + i + "97_3(jkMYg@T[KZQmqjTK")

sign為對兩個字符串加上e和i拼接的md5加密
其中i即為salt
在這里插入圖片描述
而e經過上面的代碼,我們可以確定為輸入的字符串
到這里我們就將需要的加密字符確定好了

實戰代碼

在PyCharm中新建一個項目,建立一個py文件
在正式寫代碼之前,我們可以在程序前加上

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Created by 秋葉夏風

第一行 指出python解釋器位置,不知道的小伙伴可以參考#!/usr/bin/python 作用
第二行 # -- coding:utf-8 --的意思時指點該程序使用的utf-8編碼,這個utf-8編碼是干啥的呢?可以參考-- coding: utf-8 --的作用
(づ ̄ 3 ̄)づ皮一下,很開心。
第三行不是必須要寫的,可以省略。。。。

導入requests模塊,代碼如下

import requests

將Request URL復制過來

url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'

將要翻譯的字符輸入進來

e = input('please input:')

下面構建請求需要的data
首先要構建的是ts,導入python中的時間模塊

import time

生成當前的時間戳

sjc = time.time()

轉換類型和進制

ts = str(int(sjc*1000))

下面構建salt
導入random模塊,

import random

生成隨機數并轉換類型和進制

salt = ts + str(int(random.random()*10))

接下來是構建sign,需要用到python中的hashlib庫來進行md5的加密,代碼如下
導入模塊

import hashlib

拼接字符串

con = "fanyideskweb" + e + salt + "97_3(jkMYg@T[KZQmqjTK"

md5加密

sign = hashlib.md5(con.encode(encoding='UTF-8')).hexdigest()

復制data中的內容
在這里插入圖片描述
在PyCharm中粘貼后按下Ctrl+R可以進行替換,需要勾選Regex(正則表達式匹配模式)
在這里插入圖片描述
匹配的正則表達式代碼如下:

^(.*): (.*)'$1':'$2',

匹配好后,將i、salt、sign和ts替換成前面生成的變量

data = {'i': e,'from': 'AUTO','to': 'AUTO','smartresult': 'dict','client': 'fanyideskweb','salt': salt,'sign': sign,'ts': ts,'bv': '9c4fffad2fb69d08cd130e408e0f8108','doctype': 'json','version': '2.1','keyfrom': 'fanyi.web','action': 'FY_BY_REALTlME'
}

構建headers,這里給出了三個必要的參數,不確定的小伙伴可以將請求頭中的Request Headers全部復制過來也行

header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36','Referer': 'http://fanyi.youdao.com/','Cookie': 'OUTFOX_SEARCH_USER_ID=-1154806696@10.168.8.76; OUTFOX_SEARCH_USER_ID_NCOO=1227534676.2988937; JSESSIONID=aaa7LDLdy4Wbh9ECJb_Vw; ___rl__test__cookies=1563334957868'
}

發出請求

res = requests.post(url,data=data,headers=header).text

用正則進行匹配翻譯的內容
導入re模塊

import re

開始匹配

rep = re.findall('"tgt":"(.*?)"',res,re.S)[0]

輸出匹配的內容

print(rep)

經過封裝,完整代碼如下

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Created by  秋葉夏風def get_data(e):'''構建data數據函數:param e: 輸入要翻譯的內容:return: 字典類型的data數據'''import timesjc = time.time()ts = str(int(sjc * 1000))import randomsalt = ts + str(int(random.random() * 10))import hashlibcon = "fanyideskweb" + e + salt + "97_3(jkMYg@T[KZQmqjTK"sign = hashlib.md5(con.encode(encoding='UTF-8')).hexdigest()data = {'i': e,'from': 'AUTO','to': 'AUTO','smartresult': 'dict','client': 'fanyideskweb','salt': salt,'sign': sign,'ts': ts,'bv': '9c4fffad2fb69d08cd130e408e0f8108','doctype': 'json','version': '2.1','keyfrom': 'fanyi.web','action': 'FY_BY_REALTlME'}return datadef get_para(e):'''獲取需要的參數:param e: 輸入字符串:return:'''header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/\537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36','Cookie': 'OUTFOX_SEARCH_USER_ID=-1154806696@10.168.8.76; \OUTFOX_SEARCH_USER_ID_NCOO=1227534676.2988937; \JSESSIONID=aaa7LDLdy4Wbh9ECJb_Vw; ___rl__test__cookies=1563334957868','Referer': 'http://fanyi.youdao.com/'}return get_data(e),headerdef search(res):'''用于匹配響應的結果:param res::return:'''import remodel = '"tgt":"(.*?)"'rep = re.findall(model, res, re.S)rep = rep[0]return repdef main():import requestsurl = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'e = input('please input:')data = get_para(e)[0]header = get_para(e)[1]response = requests.post(url,data=data,headers=header).textresult = search(response)print(result)
if __name__ == '__main__':while True:main()

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/455819.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/455819.shtml
英文地址,請注明出處:http://en.pswp.cn/news/455819.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

PartitionMotionSearch()

Outline: 1、 CFG文件中有關多參考幀的相關選項 2、 多參考幀涉及到的數據結構和全局變量 3、 保存重建圖像為參考幀 4、 編碼一幀前,設置參考幀列表 5、 多參考幀的使用(即參考幀的選擇策略問題) 6、 遺留問題 1、CFG文件中有關多參考…

bat 發送post請求_get post 請求

HTTP是一個基于TCP/IP來傳遞數據的通信協議。1.GET和POST請求的區別?a: GET/POST本質上都是TCP鏈接,GET傳body和POST拼參數,理論上都是可行的。b: 實際上HTTP協議對URL長度是沒有限制的;限制URL長度大多數是瀏覽器或者服務器的配置…

Safengine Android so加密

公司讓我找一個可以對android,嵌入式和Linux x86平臺的so庫進行加密的工具,我看搞了兩天這個工具,反正也沒用上,就把教程發出來了 下載地址:http://www.safengine.com/mobile/download.html 使用方法: 我使…

boltdb 學習和實踐

golang boltdb的學習和實踐 1. 安裝 go get github.com/boltdb/bolt 2.創建和啟動數據庫 db, err : bolt.Open("my.db", 0600, nil) 其中open的第一個參數為路徑,如果數據庫不存在則會創建名為my.db的數據庫, 第二個為文件操作,第三個參數是可…

【django】使用django-crontab執行django自定義指令

django-crontab 部署 需求:再指定的時間內輸入django的自定義指令,來進行一些需求的操作。 使用流程: 1.安裝: pip install django-crontab 2.配置 settings.py文件: 再settings.py 文件中添加 django-crontab: INSTALLED_APPS (...django…

濾波問題匯總

1。A:JM86里面,GetStrength這個函數中下面這個數組有什么作用呢??byte BLK_NUM[2][4][4] {{{0,4,8,12},{1,5,9,13},{2,6,10,14},{3,7,11,15}},{{0,1,2,3},{4,5,6,7},{8,9,10,11},{12,13,14,15}}} ;blk_y (mb_y<<2) (blkQ >> 2) ;blk_x (mb_x<<2)…

redis基本類型和使用

redis存儲數據的基本類型有&#xff1a;string&#xff08;字符串類型&#xff09;、hash&#xff08;散列類型&#xff09;、list&#xff08;列表類型&#xff09;、set&#xff08;集合類型&#xff09;、zset&#xff08;有序集合類型&#xff09;。 依次做一些練習。redis…

Python與MySQL數據庫連接

Python3 MySQL 數據庫連接 MySQL 可應用于多種語言&#xff0c;包括 PERL, C, C, JAVA 和 PHP 什么是 PyMySQL&#xff1f; PyMySQL 是在 Python3.x 版本中用于連接 MySQL 服務器的一個庫&#xff0c;Python2中則使用mysqldb。 PyMySQL 遵循 Python 數據庫 API v2.0 規范&a…

mysql 日志_MySQL日志系統

MySQL日志系統MySQL有兩個重要的日志系統&#xff0c;分別是 redo log (重做日志) 和 bin log (歸檔日志) 。這兩種日志有以下三點不同。redo log 是 InnoDB 引擎特有的&#xff1b;binlog 是 MySQL 的 Server 層實現的&#xff0c;所有引擎都可以使用。redo log 是物理日志&am…

盛大游戲杯第十五屆上海大學程序設計聯賽暨上海金馬五校賽

編程1小時&#xff0c;提交4小時 做這種比賽一定要選一個好OJ啊 黑白圖像直方圖 發布時間: 2017年7月8日 21:00 最后更新: 2017年7月8日 22:38 時間限制: 1000ms 內存限制: 128M 描述 在一個矩形的灰度圖像上&#xff0c;每個像素點或者是黑色的或者是白色的。黑色像素點…

對幾個重要問題的闡述

由于DPB中間的參考幀的MV都是以4X4塊為單位&#xff0c;現在以8X8塊作Direct mode模式&#xff0c;所以必須對子塊的MV作合并&#xff0c; JM采用的東西是如下圖的方式: x o | o x o o | o o - - - - - o o | o o x o | o x 每8X8塊取外角上的4X4塊的MV. 算法如下: <<<…

【MySQL】基于Docker的Mysql主從復制搭建

基于Docker的Mysql主從復制搭建 為什么基于Docker搭建&#xff1f; 資源有限 虛擬機搭建對機器配置有要求&#xff0c;并且安裝mysql步驟繁瑣 一臺機器上可以運行多個Docker容器 Docker容器之間相互獨立&#xff0c;有獨立ip&#xff0c;互不沖突 Docker使用步驟簡便&#xf…

Web開發介紹

Web開發介紹 一,認識一個網站 最早的軟件都是運行在大型機上的&#xff0c;軟件使用者通過“啞終端”登陸到大型機上去運行軟件。 后來隨著PC機的興起&#xff0c;軟件開始主要運行在桌面上&#xff0c;而數據庫這樣的軟件運行在服務器端&#xff0c;這種Client/Server模式簡…

python云端系統開發入門_Python云端系統開發入門

第01課 初識Django 課時1Django框架介紹 00 : 14 : 33 開始學習 課時2工程搭建1 00 : 28 : 50 開始學習 課時3工程搭建2 00 : 13 : 22 開始學習 第02課 請求和響應的處理 課時1獲取請求url的參數 00 : 07 : 57 開始學習 課時2獲取請求url的查詢字符串 00 : 12 : 01 開始學習 課…

IBM 安全部門 CTO:AI 必須被重新定義為“增強智能”

編者按&#xff1a;隨著人工智能的發展&#xff0c;人們對它逐漸有誤會、恐懼之心。如果能夠利用好人工智能&#xff0c;特別是在網絡安全領域&#xff0c;它將成為人類對抗網絡犯罪強有力的武器。IBM 安全部門的 CTO Sandy Bird 認為現在的人工智能應該被重新定義為“增強智能…

【Nginx】通過反向代理配置本地圖床功能

安裝nginx sudo apt-get install nginx配置nginx.conf sudo vim /etc/nginx/nginx.conf worker_processes auto; pid /run/nginx.pid;events {worker_connections 768;# multi_accept on; }http {sendfile on;tcp_nopush on;tcp_nodelay on;keepalive_timeout 65;types_hash…

構建之法第二章

單元測試&#xff1a;一個開發人員要面對測試一個單元時只給出單元的代碼而沒有規格說明這樣吃力不討好的任務.你怎樣做才會有更多的收獲,而不僅僅是發現編譯器的Bug?第一步是理解這個單元原本要做什么, --- 不是它實際上做了什么. 比較有效的方法是倒推出一個概要的規格說明.…

幀內預測模式提取

if (input->rdopt) { int mb_available_up; int mb_available_left; int mb_available_up_left; min_rdcost max_rdcost; // precompute all new chroma intra prediction modes // 對色度進行幀內預測 IntraChromaPredict…

Django簡介以及安裝

Django簡介 1. 認識Django Django是一個高級的Python Web框架&#xff0c;它鼓勵快速開發和清潔&#xff0c;務實的設計。由經驗豐富的開發人員構建&#xff0c;它負責Web開發的許多麻煩&#xff0c;因此您可以專注于編寫應用程序&#xff0c;而無需重新創建輪子。它是免費的…

python基礎筆試面試題_python基礎面試常見題

Python是目前市面上&#xff0c;我個人認為是最簡潔、最優雅、最有前途、最全能的編程語言&#xff0c;沒有之一。 2、通過什么途徑學習的Python&#xff1f; 通過自學&#xff0c;包括網上查看一些視頻&#xff0c;購買一些相關專業的書籍。 3、Python和Java、PHP、C、C#、C等…