主頁 > 軟體設計 > 一起學爬蟲(Python) — 09

一起學爬蟲(Python) — 09

2020-12-07 10:51:50 軟體設計

今天劃劃水

  • 從零開始的爬蟲生活
    • 夢回s4
    • 明確思路
    • 開始行動
    • 成果
  • 點進來看一看(勾引)

從零開始的爬蟲生活

標題為什么要這么寫呢,因為我發現啊,有很多跟著一起學習的小伙伴,對于基礎并不是掌握的很牢固,或者說很充實,所以小澤準備講的慢一點,在講爬蟲的同時,把基礎也給好好地講一講!
對了,400贊更新下一期哦!!!400贊400贊,大家一起努力鴨
(`?ω?′)

夢回s4

今天,就讓我們一起重新完善一下,昔日我們寫下的,翻譯器!
在這里插入圖片描述
這里跟大家說一個需要注意的點,如果我們要在原本可以運行的代碼上做出修改或者添加功能,最好最好最好是重新建立一個py檔案,然后粘貼復制,這是一個好習慣,我有,希望大家也有( ̄▽ ̄)~*!
這里小澤呢,就先新建一個py檔案:
在這里插入圖片描述
然后找到我們當初寫的代碼,如果沒找到的話,沒關系,這里給你直接拷貝過來:

# 參考requests模塊和json模塊,為了解碼
import requests
import json
# 指定我們剛才辛辛苦苦找到的url
url = 'http://fy.iciba.com/ajax.php?a=fy'
header = {
    'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'
}
word = input('請輸入要翻譯的英語:')
date = {
    'f': 'zh',
    't': 'en',
    'w': word
}
# .content是轉成二進制的意思 .decode()是指定編譯格式,默認編碼為字串編碼
response = requests.post(url=url,data=date,headers=header).content.decode()
# 用json模塊的loads實作把爬下來的資料轉換成我們能看懂的資料
# 這里大家可以列印一下response看一看資料就知道了~要多實踐哦
a = json.loads(response)['content']
b = a['word_mean']
print('---------------------------------------------')
for i in b:
    print(i)
print('---------------------------------------------')
print('翻譯完成!')

今天,我們就要把它給完善嘍!
那么首先,我們要先有一個思維流程對吧,做什么事都要先想一想大致的流程,這里再教大家一個比較實用的技巧:
在這里插入圖片描述
新建一個file檔案,這個檔案有什么好處呢?
總之就是…格調瞬間就高了起來(`?ω?′),比如:
在這里插入圖片描述
是不是要比寫一堆注釋來的好看,而且思路也會更明確!

明確思路

既然說了半天思路要明確,那么大家都明確思路了嗎?
很顯然,沒有!
好吧~╮(╯﹏╰)╭
這里只能小澤帶著大家一起捋一捋思路了:
首先我們上次完成的是一個翻譯功能,但是一個翻譯器肯定不是光有翻譯功能對吧,就像我們上廁所,不光要有排尿系統,還要有那個東西對吧,還要有洞洞,不然的話你也出不來,所以有的時候啊,不能光看內在,也要適當的看一看外在!!!o(* ̄3 ̄)o
那我們就試著把上一次寫的翻譯功能真正的變成一個 動態的功能吧 動態的功能吧 動態的功能吧 !

開始行動

怎么寫功能呢?def啊,怎么寫def呢?def 函式名():啊,怎么寫def 函式名():呢?……

# def 方法名():
def fun():
	# pass意為跳過,就像你遇到不會做的題跳過一樣
	# 程式見到pass就去找下一個命令了
	pass

然后我們再把第4天的翻譯功能寫到功能里,就起個比較洋氣的名字吧:

# 參考requests模塊和json模塊,為了解碼
import requests
import json
# def 函式名():
def fanyi():
    # 指定我們剛才辛辛苦苦找到的url
    url = 'http://fy.iciba.com/ajax.php?a=fy'
    header = {
        'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'
    }
    word = input('請輸入要翻譯的英語:')
    date = {
        'f': 'zh',
        't': 'en',
        'w': word
    }
    # .content是轉成二進制的意思 .decode()是指定編譯格式,默認編碼為字串編碼
    response = requests.post(url=url,data=date,headers=header).content.decode()
    # 用json模塊的loads實作把爬下來的資料轉換成我們能看懂的資料
    # 這里大家可以列印一下response看一看資料就知道了~要多實踐哦
    a = json.loads(response)['content']
    b = a['word_mean']
    print('---------------------------------------------')
    for i in b:
        print(i)
    print('---------------------------------------------')
    print('翻譯完成!')

不難看出來,其實就是開頭寫了個def fanyi(): 然后把下面的所有內容都往右縮進了一個表格,也許你要問什么是表格了,吶吶吶,直接教你好了,選中下面所有內容,然后按一下TAB,就是Q旁邊的那個按鍵,嘩的一下,就縮過去了(<ゝω?)☆
但是,總所周知,一個好的方法絕對不是死的,我們需要添加一些引數,觀察一下,哪些資料是可以變成動態的!
就比如有很多小伙伴問過的,怎么用中文翻譯英文,或者一些其他語言,兩種語言的選擇,加到引數里!!!
在這里插入圖片描述
這樣子就實作了我們動態改變翻譯語種的目標!
在這里插入圖片描述
為什么這么說呢,比如說啊,我們呼叫一下函式:
在這里插入圖片描述
可以看到,我們選擇的翻譯語種是英譯漢,en代表的英語,zh代表的漢語,但是大家還記得auto嗎?
就是自動翻譯的時候兩個值都會是auto:
在這里插入圖片描述
那么我們可不可以兩個都填auto呢?
當然不可以啦!!!
你要這樣想,服務器能識別你要翻譯的句子,但是它不能猜到你想要翻譯成什么鴨,對吧!
所以auto只能存在一個,那么我們就把en換成auto試試:
在這里插入圖片描述
試一試,比如我們輸入一句日語!
いいね
在這里插入圖片描述
可以看到這里還是請輸入要翻譯的英語,不太合適,讓我們改一下吧!
在這里插入圖片描述
然后運行,輸入剛才那句日語いいね,揍你:
在這里插入圖片描述
好家伙,直接給我們報錯了,很快啊!
在這里插入圖片描述
意思就是沒有這個索引值嘍,那我們把字典全部列印出來看一看,到底是什么東西!
在這里插入圖片描述
注釋掉列印出來的那些東西,只看a,a就是我們爬下來的字典哦!
在這里插入圖片描述
原來問題就出在這里!如果用日語進行翻譯,輸出的索引值就會變成out,而不是我們之前用的word_mean,

那么我們再試一下英語:
在這里插入圖片描述
英語翻譯成中文,是word_mean,我們再試一下別的語言:
在這里插入圖片描述
可以看到,我們輸入了一句西班牙語哈:
在這里插入圖片描述
但是自動識別給我們識別成了en,也就是英語,說明這個自動識別也不怎么可靠嘛~

所以我們還是進行手動的錄入語種,比如西班牙語就是:
在這里插入圖片描述
在這里插入圖片描述
當然這里我們不管那么多,先只實作英譯漢,和漢譯英!

目標明確,也就是說我們要先寫一個判斷:判斷用戶是要漢譯英,還是英譯漢,

怎么寫呢,不會寫嗎,好吧,讓你抄作業好了(?′?`?)

if __name__ == '__main__':
    # 用于輸入需求
    how = input('英譯漢/漢譯英(0/1):')
    if how == '0':
        fanyi('en','zh')
    elif how == '1':
        fanyi('zh','en')
    else:
        print('請輸入正確的數字!')

如果想再人性化一些,比如加個是否需要繼續翻譯,要怎么做呢?

第一步:死回圈!

if __name__ == '__main__':
    while True:
        # 用于輸入需求
        how = input('英譯漢/漢譯英(0/1):')
        if how == '0':
            fanyi('en','zh')
        elif how == '1':
            fanyi('zh','en')
        else:
            print('請輸入正確的數字!')

死回圈有了,現在的效果就是我們翻譯完了一個,就會又讓我們繼續翻譯,所以我們要設定一個退出的選項:break,

(〃‘▽’〃)

if __name__ == '__main__':
    while True:
        # 用于輸入需求
        how = input('英譯漢/漢譯英(0/1):')
        if how == '0':
            fanyi('en','zh')
            ranhou = input('是否繼續翻譯?(0/1):')
            if ranhou == '1':
                break
        elif how == '1':
            fanyi('zh','en')
            ranhou = input('是否繼續翻譯?(0/1):')
            if ranhou == '1':
                break
        else:
            print('請輸入正確的數字!')

然后我們就會發現,如果繼續翻譯了,就會又回到最初始的界面,這很笨,不好,
在這里插入圖片描述
那么我們該怎么辦呢?弄復雜一點唄,多判斷一下唄,

 ̄へ ̄

程式員,就是受苦受累的!我們要悄悄地掉頭發,然后在人群中閃瞎所有人!

import sys
if __name__ == '__main__':
    while True:
        # 用于輸入需求
        how = input('英譯漢/漢譯英(0/1):')
        print('*'*50)
        if how == '0':
            fanyi('en','zh')
            print('*' * 50)
            while True:
                ranhou = input('繼續當前翻譯/回到主界面/退出(0/1/2):')
                print('*' * 50)
                if ranhou == '0':
                    fanyi('en','zh')
                    print('*' * 50)
                elif ranhou == '1':
                    break
                else:
                    sys.exit()
        elif how == '1':
            fanyi('zh','en')
            print('*' * 50)
            while True:
                ranhou = input('繼續當前翻譯/回到主界面/退出(0/1/2):')
                print('*' * 50)
                if ranhou == '0':
                    fanyi('zh', 'en')
                    print('*' * 50)
                elif ranhou == '1':
                    break
                else:
                    sys.exit()
        else:
            print('請輸入正確的數字!')

當然,也可以加點花樣,讓界面更好看一點,做一個講究的程式員!

由于上述代碼都是基礎類的,所以就不一一注釋了,如果需要解答可以留言哦!

在這里插入圖片描述
效果棒棒噠!

(`?ω?′)

那么剩下要解決的一個問題就是怎么把:
在這里插入圖片描述
這個煩人的東西給簡化嘍!

眾所周知,這兩種輸出不是out就是world_mean,大不了就出錯唄,兩個都要!

也省的想那么多,hhh

這里就要用到我們的try和except組合啦,來,讓我們 解 除 封 印 !

在這里插入圖片描述
跑到我們的翻譯方法函式里面去,把try和except先寫上嘍!

直接把我們原本用的復制到try里面,再把另外一種寫到except里面,很簡單吧很簡單吧很簡單吧,如果哪里不懂的話,一定一定要問,不要迷迷糊糊就過去了,打好基礎才能做好后面的一切,基礎真的真的很重要!!

在這里插入圖片描述

成果

這里我們在外面已經做了界面的一些修飾,所以把兩條橫線去掉,大功告成!來試一下吧:
在這里插入圖片描述
成功達到了一個…比之前要好的效果!

當然最后的歡迎使用是判斷退出的時候加上的,應該是謝謝使用哈~

點進來看一看(勾引)

可能有些小伙伴要說了,你明明在劃水,演都不帶演的!

真的是冤枉啊!!!

是有很多很多小伙伴私信或者加了群跟小澤說這類的問題,所以小澤才想做一期詳細講解的,也方便有一些基礎不是很牢固的小伙伴聽講對叭!!

(`?ω?′)

你問群?

在這里插入圖片描述
從之前的3個人,已經壯大到現在的25個人啦,在這里你想問的問題都可以問,說不定還可以參與到一些實踐的專案里,只要你有一顆學徒的心,就能加進來!

沒廣告,沒賣課,沒收費資源!有的只是一群單身漢而已!!真的!!!

當然還有的小伙伴說對異步這一塊不是很了解,所以下一期就準備做異步的更詳細講解,還有更多案例哦!!

如果想看的話,就快點贊吧~

唉…求求你們不要光關注不點贊了,小澤還是比較喜歡點贊,hhh

老規矩,400贊更下一期!

200多粉絲呢,不會達不到吧,不會把不會吧~

(`?ω?′)

如果喜歡的話,點個贊最好點個關注加個群啥的,大家一起學習交流,如果覺得對你有幫助了,那就太好了!

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
各位兄弟姐妹早點睡覺,來日再見,溜了,

(`?ω?′)

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/231031.html

標籤:其他

上一篇:肥豬的鋼琴床(dp好題)

下一篇:Java集合中Collection和Map

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more