国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Python爬蟲實(shí)戰(zhàn)(高級(jí)篇)—3百度翻譯網(wǎng)頁(yè)版爬蟲(附完整代碼)

這篇具有很好參考價(jià)值的文章主要介紹了Python爬蟲實(shí)戰(zhàn)(高級(jí)篇)—3百度翻譯網(wǎng)頁(yè)版爬蟲(附完整代碼)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

首先這篇文章是轉(zhuǎn)載的,但是我看懂了,經(jīng)過(guò)修改成功了?。?/h3>

python百度翻譯爬蟲,Python爬蟲,python,爬蟲,開(kāi)發(fā)語(yǔ)言

PS上一節(jié)課:請(qǐng)查看【爬蟲專欄】

本文所需的庫(kù)(其余為內(nèi)置庫(kù)):

庫(kù) 安裝
js2py pip install js2py
requests pip install requests

我依照原帖的思路講一下:

第 1 步,進(jìn)入百度翻譯網(wǎng)頁(yè)版:點(diǎn)我

第 2 步 分析所需參數(shù)

這里我們發(fā)現(xiàn)所需的參數(shù):

1、sign(這是最重要的!?。?/h4>

2、token

3、ts,時(shí)間戳

第 3 步 分析sign 加密代碼,這里我就直接展示出來(lái)了

請(qǐng)將該文件命名【webtrans.js】

// webtrans.js

function n(r, o) {
    for (var t = 0; t < o.length - 2; t += 3) {
        var a = o.charAt(t + 2);
        a = a >= "a" ? a.charCodeAt(0) - 87 : Number(a),
        a = "+" === o.charAt(t + 1) ? r >>> a : r << a,
        r = "+" === o.charAt(t) ? r + a & 4294967295 : r ^ a
    }
    return r
}
function e(r) {
    var o = r.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g);
    if (null === o) {
        var t = r.length;
        t > 30 && (r = "" + r.substr(0, 10) + r.substr(Math.floor(t / 2) - 5, 10) + r.substr(-10, 10))
    } else {
        for (var e = r.split(/[\uD800-\uDBFF][\uDC00-\uDFFF]/), C = 0, h = e.length, f = []; h > C; C++)
            "" !== e[C] && f.push.apply(f, a(e[C].split(""))),
            C !== h - 1 && f.push(o[C]);
        var g = f.length;
        g > 30 && (r = f.slice(0, 10).join("") + f.slice(Math.floor(g / 2) - 5, Math.floor(g / 2) + 5).join("") + f.slice(-10).join(""))
    }
    var u = void 0
      ,
        // l = "" + String.fromCharCode(103) + String.fromCharCode(116) + String.fromCharCode(107);
        i = null;
        u = null !== i ? i : (i = window[l] || "") || "";
    for (var d = u.split("."), m = Number(d[0]) || 0, s = Number(d[1]) || 0, S = [], c = 0, v = 0; v < r.length; v++) {
        var A = r.charCodeAt(v);
        128 > A ? S[c++] = A : (2048 > A ? S[c++] = A >> 6 | 192 : (55296 === (64512 & A) && v + 1 < r.length && 56320 === (64512 & r.charCodeAt(v + 1)) ? (A = 65536 + ((1023 & A) << 10) + (1023 & r.charCodeAt(++v)),
        S[c++] = A >> 18 | 240,
        S[c++] = A >> 12 & 63 | 128) : S[c++] = A >> 12 | 224,
        S[c++] = A >> 6 & 63 | 128),
        S[c++] = 63 & A | 128)
    }
    for (var p = m, F = "" + String.fromCharCode(43) + String.fromCharCode(45) + String.fromCharCode(97) + ("" + String.fromCharCode(94) + String.fromCharCode(43) + String.fromCharCode(54)), D = "" + String.fromCharCode(43) + String.fromCharCode(45) + String.fromCharCode(51) + ("" + String.fromCharCode(94) + String.fromCharCode(43) + String.fromCharCode(98)) + ("" + String.fromCharCode(43) + String.fromCharCode(45) + String.fromCharCode(102)), b = 0; b < S.length; b++)
        p += S[b],
        p = n(p, F);
    return p = n(p, D),
    p ^= s,
    0 > p && (p = (2147483647 & p) + 2147483648),
    p %= 1e6,
    p.toString() + "." + (p ^ m)
}

python百度翻譯爬蟲,Python爬蟲,python,爬蟲,開(kāi)發(fā)語(yǔ)言

第 4 步:

在調(diào)用上述js函數(shù)前,需要獲取網(wǎng)頁(yè)中的【window.bdstoken】以及【window.gtk】,如下圖

只有拿到這兩個(gè)才能生成 sign

python百度翻譯爬蟲,Python爬蟲,python,爬蟲,開(kāi)發(fā)語(yǔ)言

第 5 步

通過(guò)【js2py】庫(kù) 調(diào)用剛剛保存的 【webtrans.js】,獲取最終的 【sign】

目錄結(jié)構(gòu)

python百度翻譯爬蟲,Python爬蟲,python,爬蟲,開(kāi)發(fā)語(yǔ)言文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-720889.html

附上完整版代碼1(自己的改寫版,后面還附贈(zèng)進(jìn)階版(面向?qū)ο?)

注意事項(xiàng)(必看)

代碼17行:token = ‘請(qǐng)您寫上自己的token’

代碼52行:token = ‘請(qǐng)您寫上自己的token’

代碼60行:cookies = {‘Cookie’: ‘請(qǐng)您寫上自己的cookie’}

import json
import re
import time
import requests
import js2py




def get_token_gtk():
    '''獲取token和gtk(用于合成Sign)'''
    url = 'https://fanyi.baidu.com/'
    resp = requests.get(url)
    html_str = resp.content.decode()
    # print(html_str)
    # token = re.findall(r"token: '(.*?)'", html_str)[0]
    token = '請(qǐng)您寫上自己的token'
    # print('token: ',token)
    pattern = r'gtk = "(.*?)\"'
    gtk = re.search(pattern, html_str).group(1)
    # print('gtk: ',gtk)
    # gtk = re.match(r".gtk = '(.*?)'", html_str)
    # print(token, gtk)
    return token, gtk
# get_token_gtk()

word = input("請(qǐng)輸入你想翻譯的中文:")

def generate_sign(gtk):
    """生成sign"""
    # 1. 準(zhǔn)備js編譯環(huán)境
    context = js2py.EvalJs()
    with open('webtrans.js', encoding='utf8') as f:
        js_data = f.read()
        js_data = re.sub("window\[l\]",'"'+gtk+'"',js_data)
        # js_data = re.sub("window\[l\]", "\"{}\"".format(gtk), js_data)
        # print(js_data)
        context.execute(js_data)
    sign = context.e(word)
    return sign

# print(generate_sign(get_token_gtk()[1]))


params = {
'from': 'zh',
'to': 'en',
'query': word,
'transtype': 'realtime',
'simple_means_flag': '3',
'sign': generate_sign(get_token_gtk()[1]),
'token': '請(qǐng)您寫上自己的token',
'domain': 'common',
'ts': int(time.time()),
}
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36',
}
cookies = {
'Cookie': '請(qǐng)您寫上自己的cookie'
}
url2 = 'https://fanyi.baidu.com/v2transapi?from=zh&to=en'
res_data = requests.post(url=url2,params=params,headers=headers,cookies=cookies)
res_data.encoding= "utf-8"
data  = json.loads(res_data.text)
# print(data)
print(f"輸入:{data['trans_result']['data'][0]['src']}")
print(f"翻譯:{data['trans_result']['data'][0]['dst']}")

完整版2(面向?qū)ο蟀妫?/h3>
# 面向?qū)ο?/span>
# 百度翻譯 -- 網(wǎng)頁(yè)版(自動(dòng)獲取token,sign)
import requests
import js2py
import json
import re


class WebFanyi:
    """百度翻譯網(wǎng)頁(yè)版爬蟲"""
    def __init__(self,query_str):
        self.session = requests.session()
        headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36",
        }
        self.session.headers = headers
        self.baidu_url = "https://www.baidu.com/"
        self.root_url = "https://fanyi.baidu.com/"
        self.lang_url = "https://fanyi.baidu.com/langdetect"
        self.trans_url = "https://fanyi.baidu.com/v2transapi"
        self.query_str = query_str

    def get_token_gtk(self):
        '''獲取token和gtk(用于合成Sign)'''
        self.session.get(self.root_url)
        resp = self.session.get(self.root_url)
        html_str = resp.content.decode()
        # print(html_str)
        token = re.findall(r"token: '(.*?)'", html_str)[0]
        # print(token)
        pattern = r'gtk = "(.*?)\"'
        gtk = re.search(pattern, html_str).group(1)
        # print(gtk)
        # gtk = re.match(r".gtk = '(.*?)'", html_str)

        return token,gtk

    def generate_sign(self,gtk):
        """生成sign"""
        # 1. 準(zhǔn)備js編譯環(huán)境
        context = js2py.EvalJs()
        with open('webtrans.js', encoding='utf8') as f:
            js_data = f.read()
            js_data = re.sub("window\[l\]",'"'+gtk+'"',js_data)
            # js_data = re.sub("window\[l\]", "\"{}\"".format(gtk), js_data)
            print(js_data)
            context.execute(js_data)
        sign = context.e(self.query_str)
        return sign

    def lang_detect(self):
        '''獲取語(yǔ)言轉(zhuǎn)換類型.eg: zh-->en'''
        lang_resp = self.session.post(self.lang_url,data={"query":self.query_str})
        lang_json_str = lang_resp.content.decode()  # {"error":0,"msg":"success","lan":"zh"}
        lan = json.loads(lang_json_str)['lan']
        to = "en" if lan == "zh" else "zh"
        return lan,to


    def parse_url(self,post_data):
        trans_resp = self.session.post(self.trans_url,data=post_data)
        trans_json_str = trans_resp.content.decode()
        trans_json = json.loads(trans_json_str)
        result = trans_json["trans_result"]["data"][0]["dst"]
        print("{}: {}".format(self.query_str,result))

    def run(self):
        """實(shí)現(xiàn)邏輯"""
        # 1.獲取百度的cookie,(缺乏百度首頁(yè)的cookie會(huì)始終報(bào)錯(cuò)998)
        self.session.get(self.baidu_url)
        # 2. 獲取百度翻譯的token和gtk(用于合成sign)
        token, gtk = self.get_token_gtk()
        # 3. 生成sign
        sign = self.generate_sign(gtk)
        # 4. 獲取語(yǔ)言轉(zhuǎn)換類型.eg: zh-->en
        lan, to = self.lang_detect()
        # 5. 發(fā)送請(qǐng)求,獲取響應(yīng),輸出結(jié)果
        post_data = {
            "from": lan,
            "to": to,
            "query": self.query_str,
            "transtype": "realtime",
            "simple_means_flag": 3,
            "sign": sign,
            "token": token
        }
        self.parse_url(post_data)

if __name__ == '__main__':
    webfanyi = WebFanyi('西瓜')
    webfanyi.run()

原帖查看

希望對(duì)大家有幫助

我也正在努力學(xué)習(xí)爬蟲,大家共同進(jìn)步?。?/h3>

都看到這了,關(guān)注+點(diǎn)贊+收藏=不迷路?。?/h3>

到了這里,關(guān)于Python爬蟲實(shí)戰(zhàn)(高級(jí)篇)—3百度翻譯網(wǎng)頁(yè)版爬蟲(附完整代碼)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Python爬蟲-爬取百度搜索結(jié)果頁(yè)的網(wǎng)頁(yè)標(biāo)題及其真實(shí)網(wǎng)址

    Python爬蟲-爬取百度搜索結(jié)果頁(yè)的網(wǎng)頁(yè)標(biāo)題及其真實(shí)網(wǎng)址

    cmd命令行輸入安裝requests庫(kù):pip3 install -i https://pypi.douban.com/simple requests 安裝bs4庫(kù):pip3 install -i https://pypi.douban.com/simple beautifulsoup4 ? https://wwuw.lanzouj.com/i1Au51a0312d 解壓文件后,需按照解壓包內(nèi)教程裝載Cookie即可使用。 本py腳本文件較符合有需求者使用,更適合python爬蟲初學(xué)者

    2024年02月08日
    瀏覽(20)
  • Python:使用爬蟲抓取網(wǎng)頁(yè)中的視頻并下載(完整源碼)

    Python:使用爬蟲抓取網(wǎng)頁(yè)中的視頻并下載(完整源碼) 在今天的程序開(kāi)發(fā)世界中,網(wǎng)站是不可或缺的一部分。人們使用網(wǎng)站來(lái)獲取有用的信息、購(gòu)買商品和娛樂(lè)自己。這些網(wǎng)站的內(nèi)容通常包含了各種類型的文件,其中最常見(jiàn)的就是視頻。對(duì)于有經(jīng)驗(yàn)的程序開(kāi)發(fā)者來(lái)說(shuō),使用

    2024年02月16日
    瀏覽(40)
  • Python 爬蟲實(shí)戰(zhàn):駕馭數(shù)據(jù)洪流,揭秘網(wǎng)頁(yè)深處

    爬蟲,這個(gè)經(jīng)常被人提到的詞,是對(duì)數(shù)據(jù)收集過(guò)程的一種形象化描述。特別是在Python語(yǔ)言中,由于其豐富的庫(kù)資源和良好的易用性,使得其成為編寫爬蟲的絕佳選擇。本文將從基礎(chǔ)知識(shí)開(kāi)始,深入淺出地講解Python爬蟲的相關(guān)知識(shí),并分享一些獨(dú)特的用法和實(shí)用技巧。本文將以

    2024年02月12日
    瀏覽(22)
  • 〖Python網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)②〗- Web網(wǎng)頁(yè)基礎(chǔ)

    訂閱:新手可以訂閱我的其他專欄。免費(fèi)階段訂閱量1000+ ????????????????python項(xiàng)目實(shí)戰(zhàn) ???????????????? Python編程基礎(chǔ)教程系列(零基礎(chǔ)小白搬磚逆襲) 說(shuō)明:本專欄持續(xù)更新中,目前專欄免費(fèi)訂閱,在轉(zhuǎn)為付費(fèi)專欄前訂閱本專欄的,可以免費(fèi)訂閱付費(fèi)專欄,

    2023年04月26日
    瀏覽(50)
  • Python爬蟲:汽車之家爬蟲(完整代碼)

    Python爬蟲:汽車之家爬蟲(完整代碼)

    ??????????歡迎來(lái)到我的博客?????????? ??作者: 秋無(wú)之地 ??簡(jiǎn)介:CSDN爬蟲、后端、大數(shù)據(jù)領(lǐng)域創(chuàng)作者。目前從事python爬蟲、后端和大數(shù)據(jù)等相關(guān)工作,主要擅長(zhǎng)領(lǐng)域有:爬蟲、后端、大數(shù)據(jù)開(kāi)發(fā)、數(shù)據(jù)分析等。 ??歡迎小伙伴們 點(diǎn)贊????、收藏

    2024年02月04日
    瀏覽(23)
  • Python網(wǎng)頁(yè)爬蟲代碼

    網(wǎng)頁(yè)爬蟲是一種自動(dòng)化程序,可以自動(dòng)地訪問(wèn)網(wǎng)頁(yè)并提取其中的信息。它可以用于各種目的,例如搜索引擎的索引、數(shù)據(jù)挖掘、價(jià)格比較、輿情監(jiān)測(cè)等。網(wǎng)頁(yè)爬蟲通常使用編程語(yǔ)言編寫,例如Python、Java等。 以下是一個(gè)簡(jiǎn)單的示例,使用 Python 和 requests 庫(kù)進(jìn)行網(wǎng)頁(yè)爬?。?在這

    2024年02月15日
    瀏覽(21)
  • Python爬蟲完整代碼模版

    以下是一個(gè)基本的Python爬蟲代碼模板,可以根據(jù)需要進(jìn)行修改: ```python import requests from bs4 import BeautifulSoup # 設(shè)置請(qǐng)求頭,模擬瀏覽器訪問(wèn) headers = { ? ? \\\'User-Agent\\\': \\\'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3\\\'} # 發(fā)送請(qǐng)求 response = r

    2024年02月11日
    瀏覽(24)
  • python爬蟲實(shí)戰(zhàn) scrapy+selenium爬取動(dòng)態(tài)網(wǎng)頁(yè)

    python爬蟲實(shí)戰(zhàn) scrapy+selenium爬取動(dòng)態(tài)網(wǎng)頁(yè)

    最近學(xué)習(xí)了scrapy爬蟲框架,想要找個(gè)目標(biāo)練練手。由于現(xiàn)在很多網(wǎng)頁(yè)都是動(dòng)態(tài)的,因此還需要配合selenium爬取。本文旨在記錄這次學(xué)習(xí)經(jīng)歷,如有疑問(wèn)或不當(dāng)之處,可以在評(píng)論區(qū)指出,一起學(xué)習(xí)。 對(duì)scrapy不了解的同學(xué)可以閱讀這篇文章 爬蟲框架 Scrapy 詳解,對(duì)scrapy框架介紹的

    2024年02月07日
    瀏覽(49)
  • Python爬蟲完整代碼拿走不謝

    對(duì)于新手做Python爬蟲來(lái)說(shuō)是有點(diǎn)難處的,前期練習(xí)的時(shí)候可以直接套用模板,這樣省時(shí)省力還很方便。 使用Python爬取某網(wǎng)站的相關(guān)數(shù)據(jù),并保存到同目錄下Excel。 直接上代碼: 直接復(fù)制粘貼就行。 若要更改爬取網(wǎng)站,則需要更改URL以及相應(yīng)的html格式(代碼中的“item”)。

    2024年02月11日
    瀏覽(17)
  • 使用Python爬取給定網(wǎng)頁(yè)的所有鏈接(附完整代碼)

    使用Python爬取給定網(wǎng)頁(yè)的所有鏈接(附完整代碼)

    ?? 個(gè)人網(wǎng)站:【海擁】【摸魚游戲】【神級(jí)源碼資源網(wǎng)】 ?? 前端學(xué)習(xí)課程:??【28個(gè)案例趣學(xué)前端】【400個(gè)JS面試題】 ?? 想尋找共同學(xué)習(xí)交流、摸魚劃水的小伙伴,請(qǐng)點(diǎn)擊【摸魚學(xué)習(xí)交流群】 此腳本從給定的網(wǎng)頁(yè)中檢索所有鏈接,并將其保存為 txt 文件。(文末有完整源

    2024年02月08日
    瀏覽(20)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包