版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Pip 安裝模塊包下載.whl包先pip install wheel之后pip install 包名字.whl 即可安裝某模塊包E.g. C:Python34Scriptspip install F:課程PyOpenGL-3.1.1-cp34-cp34m-win32.whlpython常見模塊命令(os/sys/platform)一、Os Python的標(biāo)準(zhǔn)庫中的os模塊主要涉及普遍的操作系統(tǒng)功能。os.sep 可以取代操作系統(tǒng)特定的路徑分割符。 字符串指示你正在使用的平臺(tái)。比如對(duì)于Windows,它是nt。os.getcwd()函數(shù)得到當(dāng)前工作目錄,即當(dāng)前Python腳本工作的
2、目錄路徑。 os.getenv()和os.putenv()函數(shù)分別用來讀取和設(shè)置環(huán)境變量。 os.listdir()返回指定目錄下的所有文件和目錄名。 os.remove()函數(shù)用來刪除一個(gè)文件。 os.system()函數(shù)用來運(yùn)行shell命令。os.linesep字符串給出當(dāng)前平臺(tái)使用的行終止符。例如,Windows使用rn。os.path.split()函數(shù)返回一個(gè)路徑的目錄名和文件名。os.path.isfile()和os.path.isdir()函數(shù)分別檢驗(yàn)給出的路徑是一個(gè)文件還是目錄。os.path.existe()函數(shù)用來檢驗(yàn)給出的路徑是否真地存在os.listdir(dirna
3、me):列出dirname下的目錄和文件os.getcwd():獲得當(dāng)前工作目錄os.curdir:返回但前目錄(.)os.chdir(dirname):改變工作目錄到dirnameos.path.isdir(name):判斷name是不是一個(gè)目錄,name不是目錄就返回falseos.path.isfile(name):判斷name是不是一個(gè)文件,不存在name也返回falseos.path.exists(name):判斷是否存在文件或目錄nameos.path.getsize(name):獲得文件大小,如果name是目錄返回0Los.path.abspath(name):獲得絕對(duì)路徑os.
4、path.normpath(path):規(guī)范path字符串形式os.path.split(name):分割文件名與目錄(事實(shí)上,如果你完全使用目錄,它也會(huì)將最后一個(gè)目錄作為文件名而分離,同時(shí)它不會(huì)判斷文件或目錄是否存在)os.path.splitext():分離文件名與擴(kuò)展名os.path.join(path,name):連接目錄與文件名或目錄os.path.basename(path):返回文件名os.path.dirname(path):返回文件路徑二、Syssys.argv: 實(shí)現(xiàn)從程序外部向程序傳遞參數(shù)。sys.exit(arg): 程序中間的退出,arg=0為正常退出。sys.get
5、defaultencoding(): 獲取系統(tǒng)當(dāng)前編碼,一般默認(rèn)為ascii。sys.setdefaultencoding(): 設(shè)置系統(tǒng)默認(rèn)編碼,執(zhí)行dir(sys)時(shí)不會(huì)看到這個(gè)方法,在解釋器中執(zhí)行不通過,可以先執(zhí)行reload(sys),在執(zhí)行 setdefaultencoding(utf8),此時(shí)將系統(tǒng)默認(rèn)編碼設(shè)置為utf8。(見設(shè)置系統(tǒng)默認(rèn)編碼 )sys.getfilesystemencoding(): 獲取文件系統(tǒng)使用編碼方式,Windows下返回mbcs,mac下返回utf-8.sys.path: 獲取指定模塊搜索路徑的字符串集合,可以將寫好的模塊放在得到的某個(gè)路徑下,就可以在程
6、序中import時(shí)正確找到。sys.platform: 獲取當(dāng)前系統(tǒng)平臺(tái)。sys.stdin,sys.stdout,sys.stderr stdin , stdout , 以及stderr 變量包含與標(biāo)準(zhǔn)I/O 流對(duì)應(yīng)的流對(duì)象. 如果需要更好地控制輸出,而print 不能滿足你的要求, 它們就是你所需要的. 你也可以替換它們, 這時(shí)候你就可以重定向輸出和輸入到其它設(shè)備( device ), 或者以非標(biāo)準(zhǔn)的方式處理它們?nèi)?、Paltformplatform.system() 獲取操作系統(tǒng)類型,windows、linux等platform.platform() 獲取操作系統(tǒng),Darwin-9.8.0
7、-i386-32bitplatform.version() 獲取系統(tǒng)版本信息 6.2.0platform.mac_ver()platform.win32_ver() (post2008Server, 6.2.9200, , uMultiprocessor Free)Summarize基本的爬蟲工作原理簡(jiǎn)單爬蟲設(shè)計(jì)入門庫: 下載網(wǎng)頁:urllib,Requests 解析網(wǎng)頁:BeautifulSoup 模擬交互,處理JS動(dòng)態(tài)網(wǎng)頁:Selenium高級(jí)爬蟲框架Scrapy分布式爬蟲設(shè)計(jì)分布式隊(duì)列布隆過濾器 (Bloom Filter)批量型爬蟲批量型爬蟲有明確的抓取范圍和目標(biāo),當(dāng)爬蟲達(dá)到這個(gè)設(shè)定的
8、目標(biāo)后,即停止抓取過程。增量型爬蟲增量型爬蟲會(huì)持續(xù)不斷的抓取,對(duì)于抓取的網(wǎng)頁,要定期更新。通用的商業(yè)搜索引擎爬蟲基本都屬于此類。垂直型爬蟲垂直型爬蟲關(guān)注特定主題內(nèi)容或者屬于特定行業(yè)的網(wǎng)頁,其他主題或者其他行業(yè)的內(nèi)容不再考慮范圍。爬蟲的分類通用爬蟲框架基本工作流程網(wǎng)絡(luò)爬蟲的基本工作流程如下:1.首先選取一部分精心挑選的種子URL;2.將這些URL放入待抓取URL隊(duì)列;3.從待抓取URL隊(duì)列中取出待抓取在URL,解析DNS,并且得到主機(jī)的ip,并將URL對(duì)應(yīng)的網(wǎng)頁下載下來,存儲(chǔ)進(jìn)已下載網(wǎng)頁庫中。此外,將這些URL放進(jìn)已抓取URL隊(duì)列。4.分析已抓取URL隊(duì)列中的URL,分析其中的其他URL,并且將
9、URL放入待抓取URL隊(duì)列,從而進(jìn)入下一個(gè)循環(huán)。從爬蟲的角度對(duì)互聯(lián)網(wǎng)進(jìn)行劃分從爬蟲的角度對(duì)互聯(lián)網(wǎng)進(jìn)行劃分對(duì)應(yīng)的,可以將互聯(lián)網(wǎng)的所有頁面分為五個(gè)部分:1.已下載未過期網(wǎng)頁2.已下載已過期網(wǎng)頁:抓取到的網(wǎng)頁實(shí)際上是互聯(lián)網(wǎng)內(nèi)容的一個(gè)鏡像與備份,互聯(lián)網(wǎng)是動(dòng)態(tài)變化的,一部分互聯(lián)網(wǎng)上的內(nèi)容已經(jīng)發(fā)生了變化,這時(shí),這部分抓取到的網(wǎng)頁就已經(jīng)過期了。 3.待下載網(wǎng)頁:也就是待抓取URL隊(duì)列中的那些頁面4.可知網(wǎng)頁:還沒有抓取下來,也沒有在待抓取URL隊(duì)列中,但是可以通過對(duì)已抓取頁面或者待抓取URL對(duì)應(yīng)頁面進(jìn)行分析獲取到的URL,認(rèn)為是可知網(wǎng)頁。5.還有一部分網(wǎng)頁,爬蟲是無法直接抓取下載的。稱為不可知網(wǎng)頁。抓取策略
10、在爬蟲系統(tǒng)中,待抓取URL隊(duì)列是很重要的一部分。待抓取URL隊(duì)列中的URL以什么樣的順序排列也是一個(gè)很重要的問題,因?yàn)檫@涉及到先抓取那個(gè)頁面,后抓取哪個(gè)頁面。而決定這些URL排列順序的方法,叫做抓取策略。下面重點(diǎn)介紹幾種常見的抓取策略: 1.深度優(yōu)先遍歷策略 2.寬度優(yōu)先遍歷策略 3.反向鏈接數(shù)策略4.Partial PageRank策略抓取策略depth-first:遍歷的路徑:A-F-G E-H-I B C Dbreadth-first:遍歷的路徑:A-B-C-D-E-F G H I網(wǎng)頁更新策略 互聯(lián)網(wǎng)是實(shí)時(shí)變化的,具有很強(qiáng)的動(dòng)態(tài)性。網(wǎng)頁更新策略主要是決定何時(shí)更新之前已經(jīng)下載過的頁面。常見
11、的更新策略又以下三種:1.歷史參考策略 顧名思義,根據(jù)頁面以往的歷史更新數(shù)據(jù),預(yù)測(cè)該頁面未來何時(shí)會(huì)發(fā)生變化。一般來說,是通過泊松過程進(jìn)行建模進(jìn)行預(yù)測(cè)。網(wǎng)頁更新策略 2.用戶體驗(yàn)策略 盡管搜索引擎針對(duì)于某個(gè)查詢條件能夠返回?cái)?shù)量巨大的結(jié)果,但是用戶往往只關(guān)注前幾頁結(jié)果。因此,抓取系統(tǒng)可以優(yōu)先更新那些顯示在查詢結(jié)果前幾頁中的網(wǎng)頁,而后再更新那些后面的網(wǎng)頁。這種更新策略也是需要用到歷史信息的。用戶體驗(yàn)策略保留網(wǎng)頁的多個(gè)歷史版本,并且根據(jù)過去每次內(nèi)容變化對(duì)搜索質(zhì)量的影響,得出一個(gè)平均值,用這個(gè)值作為決定何時(shí)重新抓取的依據(jù)網(wǎng)頁更新策略 3.聚類抽樣策略前面提到的兩種更新策略都有一個(gè)前提:需要網(wǎng)頁的歷史信息
12、。這樣就存在兩個(gè)問題:第一,系統(tǒng)要是為每個(gè)系統(tǒng)保存多個(gè)版本的歷史信息,無疑增加了很多的系統(tǒng)負(fù)擔(dān);第二,要是新的網(wǎng)頁完全沒有歷史信息,就無法確定更新策略。這種策略認(rèn)為,網(wǎng)頁具有很多屬性,類似屬性的網(wǎng)頁,可以認(rèn)為其更新頻率也是類似的。要計(jì)算某一個(gè)類別網(wǎng)頁的更新頻率,只需要對(duì)這一類網(wǎng)頁抽樣,以他們的更新周期作為整個(gè)類別的更新周期。分布式抓取系統(tǒng)結(jié)構(gòu) 一般來說,抓取系統(tǒng)需要面對(duì)的是整個(gè)互聯(lián)網(wǎng)上數(shù)以億計(jì)的網(wǎng)頁。單個(gè)抓取程序不可能完成這樣的任務(wù)。往往需要多個(gè)抓取程序一起來處理。一般來說抓取系統(tǒng)往往是一個(gè)分布式的三層結(jié)構(gòu)。如圖所示:分布式抓取系統(tǒng)結(jié)構(gòu) 最下一層是分布在不同地理位置的數(shù)據(jù)中心,在每個(gè)數(shù)據(jù)中心里
13、有若干臺(tái)抓取服務(wù)器,而每臺(tái)抓取服務(wù)器上可能部署了若干套爬蟲程序。這就構(gòu)成了一個(gè)基本的分布式抓取系統(tǒng)。對(duì)于一個(gè)數(shù)據(jù)中心內(nèi)的不同抓去服務(wù)器,協(xié)同工作的方式有幾種: 1.主從式(Master-Slave) 2.對(duì)等式(Peer to Peer)主從式抓取系統(tǒng)結(jié)構(gòu)主從式抓取系統(tǒng)結(jié)構(gòu)對(duì)于主從式而言,有一臺(tái)專門的Master服務(wù)器來維護(hù)待抓取URL隊(duì)列,它負(fù)責(zé)每次將URL分發(fā)到不同的Slave服務(wù)器,而Slave服務(wù)器則負(fù)責(zé)實(shí)際的網(wǎng)頁下載工作。Master服務(wù)器除了維護(hù)待抓取URL隊(duì)列以及分發(fā)URL之外,還要負(fù)責(zé)調(diào)解各個(gè)Slave服務(wù)器的負(fù)載情況。以免某些Slave服務(wù)器過于清閑或者勞累。這種模式下,Ma
14、ster往往容易成為系統(tǒng)瓶頸。對(duì)等式抓取系統(tǒng)結(jié)構(gòu)對(duì)等式抓取系統(tǒng)結(jié)構(gòu) 在這種模式下,所有的抓取服務(wù)器在分工上沒有不同。每一臺(tái)抓取服務(wù)器都可以從待抓取在URL隊(duì)列中獲取URL,然后對(duì)該URL的主域名的hash值H,然后計(jì)算H mod m(其中m是服務(wù)器的數(shù)量,以上圖為例,m為3),計(jì)算得到的數(shù)就是處理該URL的主機(jī)編號(hào)。這種模式有一個(gè)問題,當(dāng)有一臺(tái)服務(wù)器死機(jī)或者添加新的服務(wù)器,那么所有URL的哈希求余的結(jié)果就都要變化。也就是說,這種方式的擴(kuò)展性不佳。對(duì)等式抓取系統(tǒng)結(jié)構(gòu) 在這種模式下,所有的抓取服務(wù)器在分工上沒有不同。每一臺(tái)抓取服務(wù)器都可以從待抓取在URL隊(duì)列中獲取URL,然后對(duì)該URL的主域名的h
15、ash值H,然后計(jì)算H mod m(其中m是服務(wù)器的數(shù)量,以上圖為例,m為3),計(jì)算得到的數(shù)就是處理該URL的主機(jī)編號(hào)。這種模式有一個(gè)問題,當(dāng)有一臺(tái)服務(wù)器死機(jī)或者添加新的服務(wù)器,那么所有URL的哈希求余的結(jié)果就都要變化。也就是說,這種方式的擴(kuò)展性不佳。布隆過濾器在構(gòu)建分布式爬蟲時(shí)抓取海量網(wǎng)頁時(shí),通常需要維護(hù)一個(gè)很長(zhǎng)的已抓取URL集合,避免重復(fù)抓取已經(jīng)下載過的網(wǎng)頁。然而即使使用哈希表來構(gòu)建這個(gè)集合,依然面臨著沖突和內(nèi)存利用率不高的缺點(diǎn)。通常的判重做法是使用Bloom Filter(布隆過濾器)來進(jìn)行已抓取網(wǎng)頁查找。布隆過濾器布隆過濾器布隆過濾器(Bloom Filter)是由布?。˙urton
16、Howard Bloom)在1970年提出的。它實(shí)際上是由一個(gè)很長(zhǎng)的二進(jìn)制向量和一系列無關(guān)的哈希函數(shù)組成,布隆過濾器可以用于檢索一個(gè)元素是否在一個(gè)集合中。它的優(yōu)點(diǎn)是空間效率和查詢時(shí)間都遠(yuǎn)遠(yuǎn)超過一般的算法,缺點(diǎn)是有一定的誤識(shí)別率和刪除困難。即Bloom Filter報(bào)告某一元素存在于某集合中,但是實(shí)際上該元素并不在集合中,但是沒有識(shí)別錯(cuò)誤的情形,如果某個(gè)元素在該集合中,那么Bloom Filter 是不會(huì)報(bào)告該元素不在集合中的,所以不會(huì)漏報(bào)。布隆過濾器相比于其它的數(shù)據(jù)結(jié)構(gòu),布隆過濾器在空間和時(shí)間方面都有巨大的優(yōu)勢(shì)。布隆過濾器存儲(chǔ)空間和插入/查詢時(shí)間都是常數(shù)。另外, Hash 函數(shù)相互之間沒有關(guān)系
17、,方便由硬件并行實(shí)現(xiàn)。布隆過濾器不需要存儲(chǔ)元素本身,在某些對(duì)保密要求非常嚴(yán)格的場(chǎng)合有優(yōu)勢(shì)。Python高級(jí)爬蟲框架ScrapyScrapy,Python開發(fā)的一個(gè)快速,高層次的屏幕抓取和web抓取框架,用于抓取web站點(diǎn)并從頁面中提取結(jié)構(gòu)化的數(shù)據(jù)。Scrapy用途廣泛,可以用于數(shù)據(jù)挖掘、監(jiān)測(cè)和自動(dòng)化測(cè)試。Scrapy吸引人的地方在于它是一個(gè)框架,任何人都可以根據(jù)需求方便的修改。它也提供了多種類型爬蟲的基類,如BaseSpider、sitemap爬蟲等,最新版本又提供了web2.0爬蟲的支持原來的代碼我們要改的指定一個(gè)文件來存放爬出來的信息,這些信息會(huì)以txt格式來保存。f=open(D:/di
18、anping/+str(time.strftime(ISOTIMEFORMAT) +.txt,a+)這個(gè)就是多IP爬蟲,一個(gè)IP很容易就被發(fā)現(xiàn)并禁止這個(gè)就是多客戶端爬蟲,單一個(gè)的客戶端很容易被發(fā)現(xiàn)并禁掉import urllib2,urlliburllib2模塊定義的函數(shù)和類幫助打開url(主要是HTTP)在一個(gè)復(fù)雜的世界-基本和簡(jiǎn)要身份驗(yàn)證,重定向,cookie和更多。 import re 正則表達(dá)式import time 提供各種時(shí)間函數(shù)import string 字符串處理的函數(shù)improt request 與urlib差不多,更簡(jiǎn)單 import socket套接字套接字是為特定網(wǎng)絡(luò)協(xié)
19、議(例如TCP/IP,ICMP/IP,UDP/IP等)套件對(duì)上的網(wǎng)絡(luò)應(yīng)用程序提供者提供當(dāng)前可移植標(biāo)準(zhǔn)的對(duì)象。它們?cè)试S程序接受并進(jìn)行連接,如發(fā)送和接受數(shù)據(jù)。為了建立通信通道,網(wǎng)絡(luò)通信的每個(gè)端點(diǎn)擁有一個(gè)套接字對(duì)象極為重要。Python中的random模塊用于生成隨機(jī)數(shù)。 import user_agents 這個(gè)比較特殊,是人為定義的庫,這個(gè)庫存儲(chǔ)了許多IP或是對(duì)點(diǎn)評(píng)網(wǎng)的訪問方式,目的就是隨機(jī)選一個(gè)IP訪問以避免網(wǎng)站對(duì)單一IP登陸的封殺。timeout = 60 socket.setdefaulttimeout(timeout) #設(shè)置 HTTP 或 Socket 訪問超時(shí),來防止爬蟲抓取某個(gè)頁面
20、時(shí)間過長(zhǎng)。(這個(gè)時(shí)間用秒 #來算)def get_status(url): r = requests.get(url, allow_redirects = False)# allow_redirects = False不允許間接地訪問,用request庫中的get函數(shù)來抓取URL return r.status_code#獲取網(wǎng)頁內(nèi)容def content_get(url): try:#“#”是注釋的意思 # proxy_ip =random.choice(proxyIP.proxy_list) # print proxy_ip # proxy_support = urllib2.ProxyH
21、andler(proxy_ip) # opener = urllib2.build_opener(proxy_support,urllib2.HTTPHandler) # urllib2.install_opener(opener) req = urllib2.Request(url)#這個(gè)類是一個(gè)抽象的URL請(qǐng)求。 user_agent = random.choice(user_agents.user_agents) #在剛才的user_agents里面隨機(jī)找一個(gè)登錄方法 req.add_header(User-Agent,user_agent) req.add_header(Referre
22、r, url) print user_agent#python 的輸出函數(shù)是print page = urllib2.urlopen(req) content = page.read() page.close() return content#正常的話就用content來保存讀出的結(jié)果并且一定要關(guān)閉文件并返回content except UnicodeDecodeError as e: print(-UnicodeDecodeError url:,url) return #解碼錯(cuò)誤則輸出并返回空 except urllib2.HTTPError as e: print(-HTTPError u
23、rl:,url) return #網(wǎng)站禁止爬蟲則輸出并返回空 except socket.timeout as e: print(-socket timout:,url) return #抓取超時(shí)則輸出并返回空 except urllib2.URLError, e: if hasattr(e, reason): print Failed to reach a server. print Reason: , e.reason return elif hasattr(e, code):#elif相當(dāng)于else if print The server couldnt fulfill the requ
24、est. print Error code: , e.code return except Exception, e: if DEBUG: print e return # if DEBUG 如果出錯(cuò)了print e return #獲取店鋪的urldef get_shopurl(url): content = content_get(url) #尋找店鋪的實(shí)際url,例如/shop/6123204,用正則表達(dá)式 #find_shopurl = pile(rs*s*a href=(.*?) class=BL title=.*?,re.DOTALL) find_shopurl = pile(rs*s*) re_next = find_next.search(content) return re_pile是將字符串編譯為用于python正則式的模式,字符前的r表示是純字符,這樣就不需要對(duì)元字符進(jìn)行兩次轉(zhuǎn)義。re.findall返回的是字符串中符合results_pat的列表,由于在results_pat中使用了子表達(dá)式,所以results存儲(chǔ)的就是子表達(dá)式所匹配的內(nèi)容,即與之間的內(nèi)容。斐波那契數(shù)列Fib()Fib(100)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度學(xué)校教師學(xué)生國(guó)際交流與合作聘用合同3篇
- 二零二五年度信息技術(shù)產(chǎn)品軟件售后服務(wù)合同書模板2篇
- 2025年度個(gè)人法律咨詢委托書范本4篇
- 二零二五年度廚房電氣設(shè)備安裝與維護(hù)承包協(xié)議4篇
- 2025版實(shí)習(xí)合同模板:實(shí)習(xí)期間解約與補(bǔ)償3篇
- 二零二五版舊機(jī)動(dòng)車交易車輛售后配件供應(yīng)合同3篇
- 2025版實(shí)習(xí)期員工勞動(dòng)合同-實(shí)習(xí)期間合同解除與續(xù)簽3篇
- 二零二五年度商業(yè)寫字樓租賃合同樣本
- 二零二五年度外語翻譯公司兼職外教資源合作與管理合同
- 2025版投資框架協(xié)議模板下載與投資法律法規(guī)咨詢3篇
- 反騷擾政策程序
- 運(yùn)動(dòng)技能學(xué)習(xí)與控制課件第十一章運(yùn)動(dòng)技能的練習(xí)
- 射頻在疼痛治療中的應(yīng)用
- 四年級(jí)數(shù)學(xué)豎式計(jì)算100道文檔
- “新零售”模式下生鮮電商的營(yíng)銷策略研究-以盒馬鮮生為例
- 項(xiàng)痹病辨證施護(hù)
- 職業(yè)安全健康工作總結(jié)(2篇)
- 懷化市數(shù)字經(jīng)濟(jì)產(chǎn)業(yè)發(fā)展概況及未來投資可行性研究報(bào)告
- 07FD02 防空地下室電氣設(shè)備安裝
- 教師高中化學(xué)大單元教學(xué)培訓(xùn)心得體會(huì)
- 彈簧分離問題經(jīng)典題目
評(píng)論
0/150
提交評(píng)論