Python網絡爬蟲項目式教程 課件全套 項目1-7 Python網絡爬蟲 - 使用分布式爬蟲爬取騰訊招聘頻道_第1頁
Python網絡爬蟲項目式教程 課件全套 項目1-7 Python網絡爬蟲 - 使用分布式爬蟲爬取騰訊招聘頻道_第2頁
Python網絡爬蟲項目式教程 課件全套 項目1-7 Python網絡爬蟲 - 使用分布式爬蟲爬取騰訊招聘頻道_第3頁
Python網絡爬蟲項目式教程 課件全套 項目1-7 Python網絡爬蟲 - 使用分布式爬蟲爬取騰訊招聘頻道_第4頁
Python網絡爬蟲項目式教程 課件全套 項目1-7 Python網絡爬蟲 - 使用分布式爬蟲爬取騰訊招聘頻道_第5頁
已閱讀5頁,還剩637頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

項目一保存服務器網頁到本地

項目要

求本項目是了解爬蟲的概念、分類等,同時掌握Python網絡爬蟲的開發(fā)環(huán)境的搭建,使用Urilib3庫請求服務器上的網頁,將網頁保存到本地。

項目分

析要完成項目任務,至少需要具備兩個基本條件:一是需要在計算機上安裝和配置Python開發(fā)環(huán)境,然后要了解Urilib3庫最簡單使用,該項目分2個任務,分別是認識爬蟲和將請求到的網頁保存到本地。

項目目

標【知識目標】熟悉網絡爬蟲的基本概念,掌握Python和Mongondb以及MySQL數據庫的安裝與配置?!灸芰δ繕恕繒惭bPython網絡開發(fā)環(huán)境和將服務器網頁保存到本地。【素質目標】提高學生的發(fā)現問題、分析問題、解決問題的能力。

知識導

圖任務一認識爬蟲及Python的安裝--任務演示本任務是初步認識爬蟲,認識爬蟲的概念、爬蟲的分類、爬蟲的作用、爬蟲開發(fā)中的法律和道德問題,然后開始安裝Python的開發(fā)環(huán)境,輸出“我親愛的祖國我永遠緊依著你的心窩!”,同時播放“我和我的祖國”歌曲。任務一

認識爬蟲及Python的安裝–知識準備Python的安裝pygame的簡單使用使用pygame播放歌曲網絡爬蟲的基本概念1.網絡爬蟲的基本概念爬蟲產生的背景目前的互聯網已經邁入大數據時代,通過對海量的數據進行分析,能夠產生極大的商業(yè)價值。1.網絡爬蟲的基本概念爬蟲產生的背景數據分析應用反饋數據采集1.網絡爬蟲的基本概念爬取的網絡數據1.網絡爬蟲的基本概念結論

無論是搜索引擎,還是個人或單位獲取目標數據,都需要從公開網站上爬取大量數據,在此需求下,爬蟲技術應運而生,并迅速發(fā)展成為一門成熟的技術。1.網絡爬蟲的基本概念什么是爬蟲?1.網絡爬蟲的基本概念什么是爬蟲如果說網絡像一張網,那么爬蟲就是網上的一只小蟲子,在網上爬行的過程中遇到了數據,就把它抓取下來。1.網絡爬蟲的基本概念爬蟲的定義網絡爬蟲,很多地方也稱為網頁蜘蛛,是一種按照一定的規(guī)則,按照某種規(guī)則自動爬取互聯網信息的程序或腳本。像谷歌搜索引擎、百度搜索引擎等就是典型的爬蟲,這些搜索引擎將互聯網上海量的網頁信息進行爬取,將爬到的每個網頁上信息進行復制,然后將該信息保存到自己所在的服務器上,然后對爬取到的數據按照某種規(guī)則,進行必要的處理。1.網絡爬蟲的基本概念爬蟲的定義

這里的數據是指互聯網上公開的并且可以訪問到的網頁信息,而不是網站的后臺信息(沒有權限訪問),更不是用戶注冊的信息(非公開的)。1.網絡爬蟲的基本概念爬蟲的作用思考爬蟲具體能做些什么呢?爬蟲的作用1.網絡爬蟲的基本概念爬蟲的作用1.網絡爬蟲的基本概念爬蟲的作用1.網絡爬蟲的基本概念爬蟲的分類-按照使用場景進行分類通用爬蟲聚焦爬蟲又稱主題網絡爬蟲,是指選擇性地爬行那些與預先定義好的主題相關的頁面的網絡爬蟲。又稱全網爬蟲,將互聯網上的網頁下載到本地,形成一個互聯網內容的鏡像備份。1.網絡爬蟲的基本概念爬蟲的分類-按照爬取形式分類累積式爬蟲聚焦爬蟲在具有一定量規(guī)模的網絡頁面集合的基礎上,采用更新數據的方式選取已有集合中的過時網頁進行抓取,以保證所抓取到的數據與真實網絡數據足夠接近。累積式爬蟲是指從某一個時間點開始,通過遍歷的方式抓取系統(tǒng)所能允許存儲和處理的所有網頁。1.網絡爬蟲的基本概念爬蟲的分類-按照爬取數據的存在方式分類表層爬蟲深層爬蟲爬取深層網頁的爬蟲就叫做深層爬蟲。深層網頁是那些大部分內容不能通過靜態(tài)鏈接獲取的、隱藏在搜索表單后的,只有用戶提交一些關鍵詞才能獲得的Web頁面。爬取表層網頁的爬蟲叫做表層爬蟲。表層網頁是指傳統(tǒng)搜索引擎可以索引的頁面,以超鏈接可以到達的靜態(tài)網頁為主構成的Web頁面。2.Python的安裝Python的安裝包,可以直接從官網下載,Python下載地址:/,單擊單擊點擊Downloads下選擇Widows,再選擇Python的版本下載。這里版本主要分成3個版本:embeddablezipfile-解壓版:解壓后配置環(huán)境變量就可以直接使用;executableinstaller-安裝版:需要安裝并配置環(huán)境變量才能使用;web-basedinstaller-在線安裝版:需要連接網絡安裝,3個版本如圖1-7所示。x86代表32位,x86-64代表64位,根據您的計算機系統(tǒng)是32位系統(tǒng)還是64位系統(tǒng)選擇下載。2.Python的安裝安裝步驟:(1)雙擊包裝包文件準備安裝,如圖所示。

2.Python的安裝安裝步驟:(2)選擇InstallNow(默認安裝方式),一路點下去,完成安裝,如圖所示。

2.Python的安裝配置環(huán)境變量:(1)在計算機上右擊,選擇屬性,如圖。

2.Python的安裝配置環(huán)境變量:(2)在彈出對話框上左鍵單擊“高級系統(tǒng)設置”,如圖所示。

2.Python的安裝配置環(huán)境變量:(3)在高級面板中,選擇系統(tǒng)變量中的Path,點編輯,如圖所示。

2.Python的安裝配置環(huán)境變量:(4)請注意配置環(huán)境變量,將“;C:\Python37;C:\Python37\Scripts;”(注意,復制雙引號中間的內容,不要復制雙引號)復制到環(huán)境變量中的系統(tǒng)變量的Path變量的最后邊位置上去,如圖所示。

2.Python的安裝測試:按下鍵盤上的win+R鍵,調出運行窗口,在運行窗口中輸入cmd回車,在cmd下輸入python-V,可以看到Python的版本號。

3.pygame的簡單使用pygame本身是用來開發(fā)游戲的,這里使用該框架來播放mp3格式的音頻文件。要使用該框架,可以使用如下命令進行安裝:pipinstallpygame該框架主要使用到了如下方法和模塊。(1)pygame.init()方法該函數在使用pygame時進行初始化,只有引用了該函數才能使用pygame提供的所用功能。

(2)pygame.Rect()方法該函數可以設置一張圖片的位置以及大小,該函數主要包含如下構造函數。1)rect=pygame.Rect(left,top,width,height)2)rect=pygame.Rect((left,top),(width,height))3)rect=pygame.Rect(object)3.pygame的簡單使用(3)pygame.mixer模塊該模塊主要是用來播放聲音的,主要用到了以下的方法。1)pygame.mixer.init()該方法主要是初始化混音器模塊。2)pygame.mixer.quit()該方法主要是卸載混音器模塊3)pygame.mixer.music.stop()該方法主要是停止播放音頻文件。4)pygame.mixer.music.pause()該方法主要是暫停播放所有音頻文件。5)pygame.mixer.music.play()該方法主要是播放載入的音頻文件。6)pygame.mixer.music.load(file)使用文件名作為參數載入音頻文件,音頻文件可以是mp3等格式。4.使用pygame播放歌曲代碼實現:01importpygame02importtime03if__name__=='__main__':04print("我親愛的祖國我永遠緊依著你的心窩!")05file_name="whwdzg.mp3"06pygame.mixer.init()#只初始化音頻部分07#載入的音樂不會全部放到內容中,而是以流的形式播放的,即在播放的時候才會一點點從文件中讀取。08track=pygame.mixer.music.load(file_name)09#播放載入的音樂。該函數立即返回,音樂播放在后臺進行。10pygame.mixer.music.play()11time.sleep(300)12pygame.mixer.music.stop()任務一認識爬蟲及Python的安裝–任務拓展1.爬蟲與反爬蟲很多網絡爬蟲對網頁的爬取能力很差,現在的網站會采取一些防爬蟲措施來阻止爬蟲的不當爬取行為。任務一認識爬蟲及Python的安裝–任務拓展1.爬蟲與反爬蟲對于采取了防爬蟲措施的網站,爬蟲程序需要采取相應的應對策略,才能成功地爬取到網站上的數據。任務一認識爬蟲及Python的安裝–任務拓展1.爬蟲與反爬蟲使用代理IP

使用代理IP的一個好處是可以匿名保護,使用數據中心代理后,使用的IP地址將是您選擇的服務器的IP地址,隱藏您的真實IP地址,從而保護您的互聯網隱私,使得服務器認為是真實的用戶在訪問,使得服務器認定不是爬蟲行為。任務一認識爬蟲及Python的安裝–任務拓展1.爬蟲與反爬蟲偽裝User-agentUser-agent表示用戶代理,是HTTP協(xié)議中的一個字段,其作用是描述發(fā)出HTTP請求的終端信息。每個正規(guī)的爬蟲都有固定的User-agent,只要將這個字段設為知名的用戶代理,就能夠成功偽裝。任務一認識爬蟲及Python的安裝–任務拓展1.爬蟲與反爬蟲降低訪問頻率User-agent表示用戶代理,是HTTP協(xié)議中的一個字段,其作用是描述發(fā)出HTTP請求的終端信息。每個正規(guī)的爬蟲都有固定的User-agent,只要將這個字段設為知名的用戶代理,就能夠成功偽裝。任務二將請求到的網頁保存到本地--任務演示本任務在Python環(huán)境搭建的基礎上,使用urllib庫,將請求到的網頁保存到本地。任務二將請求到的網頁保存到本地–知識準備安裝和配置MySQL數據庫簡單使用urllib庫1簡單使用urllib庫urllib是一個http請求的Python自帶的標準庫,無需安裝,直接可以用。并且提供了如下功能:網頁請求、響應獲取、代理和cookie設置、異常處理、URL解析,可以說是一個比較強大的模塊。urllib.request的GET請求是如下方式:urllib.request.urlopen(url,data,timeout)url:請求地址data:請求數據timeout:請求超時時間data和timeout為可選參數,可以為空,也就是說可以不寫。1簡單使用urllib庫【例】使用urllib庫請求網頁。importurllib.requestresponse=urllib.request.urlopen('/u_13389043/3153863')print("此時的數據類型為:"+str(type(response)))response=response.read().decode('utf-8')print("編碼以后的數據類型為:"+str(type(response)))1簡單使用urllib庫【例】使用urllib庫請求網頁。importurllib.requestresponse=urllib.request.urlopen('/u_13389043/3153863')print("此時的數據類型為:"+str(type(response)))response=response.read().decode('utf-8')print("編碼以后的數據類型為:"+str(type(response)))2安裝和配置MySQL數據庫網絡爬蟲采集到數據以后,一般是放到數據庫進行保存。數據庫的選擇一般有SQLite、MySQL、以及MongoDB等數據庫。這里首先介紹MySQL數據庫的安裝。這里以Mysql社區(qū)版mysql-installer-community-,在64位系統(tǒng)Windows系統(tǒng)安裝為例,給出其具體的安裝步驟。2安裝和配置MySQL數據庫1)雙擊打開msi安裝包,勾選接收許可安裝條款,單擊“Next”按鈕后進入安裝選擇,如圖所示。2安裝和配置MySQL數據庫2)在彈出框中選擇64位版本,如圖所示。2安裝和配置MySQL數據庫3)在下方左側欄內選擇需要安裝的程序,單擊右箭頭移至安裝欄內,如圖所示。2安裝和配置MySQL數據庫4)單擊“Next”按鈕后,會檢測系統(tǒng)上是否安裝有相關依賴的軟件,若沒有安裝,則會出現類似下圖所示的界面,如圖所示。2安裝和配置MySQL數據庫5)單擊“Next”按鈕后,進入安裝確認步驟,將被安裝的程序會顯示在框內,單擊“Execute”按鈕將開始安裝過程,如圖所示。2安裝和配置MySQL數據庫6)安裝完成后,還需配置服務,一般用戶類型選擇“DevelopmentMachine”,MySQL的默認端口為3306,如圖所示。2安裝和配置MySQL數據庫7)設置root賬戶的密碼,可添加一個具有普通用戶權限的MySQL用戶賬戶,也可不添加,如圖所示。2安裝和配置MySQL數據庫8)勾選“ConfigureMySQLServerasaWindowsService”后將以系統(tǒng)用戶運行Windows服務,在Windows下MySQL默認服務名為mysql56,如圖所示。2安裝和配置MySQL數據庫9)最后進入服務配置應用步驟,單擊“Execute”按鈕將開始執(zhí)行,如圖所示。2安裝和配置MySQL數據庫10)執(zhí)行成功的服務配置將變?yōu)榫G色的勾選狀態(tài),單擊“Finish”按鈕完成配置過程,如圖所示。2安裝和配置MySQL數據庫11)打開“環(huán)境變量”對話框。右鍵單擊“我的電腦”圖標,單擊“高級系統(tǒng)設置”按鈕,在彈出的“系統(tǒng)屬性”對話框中單擊“環(huán)境變量”按鈕,即可彈出的“環(huán)境變量”對話框,如圖所示。2安裝和配置MySQL數據庫12)新建環(huán)境變量“MYSQL_HOME”,變量值填寫“C:\ProgramFiles\MySQL\MySQLServer5.6”,其中MySQL默認安裝在C:\ProgramFiles路徑下,如圖所示。2安裝和配置MySQL數據庫13)在“Path”變量后面添加“%MYSQL_HOME%\bin”,如圖所示。2安裝和配置MySQL數據庫14)檢驗環(huán)境配飾是否生效,使用管理員權限運行命令提示符,使用“netstartmysql56”命令啟動MySQL服務,使用“netstopmysql56”可關閉MySQL服務,如圖所示。任務二將請求到的網頁保存到本地–任務實施對目標網頁url=“/2019/09/04/ARTI9r6wRsrNhbZv4DwlWC5T190904.shtml”使用urllib庫發(fā)起請求,將網頁的響應數據保存到本地,然后實現本地可以瀏覽訪問。這里可以將該網頁的css文件也發(fā)起一次請求,可以將本地文件也保存到本地。這樣,這里一共需要兩次發(fā)起網頁請求,兩次保存網頁的操作,這里給出實例代碼。importurllib.requestlist1=['/2019/09/04/ARTI9r6wRsrNhbZv4DwlWC5T190904.shtml','/photoAlbum/templet/common/DEPA1452765360136771/style_arti.css']defsave_data():foriinrange(0,2):response=urllib.request.urlopen(list1[i])response=response.read().decode('utf-8')ifi==0:f=open("./gzzq.html","w",encoding="utf-8")#保存網頁f.write(response)else:f=open("./index.css","w",encoding="utf-8")#保存CSSf.write(response)save_data()任務二將請求到的網頁保存到本地–任務實施對目標網頁url=“/2019/09/04/ARTI9r6wRsrNhbZv4DwlWC5T190904.shtml”使用urllib庫發(fā)起請求,將網頁的響應數據保存到本地,然后實現本地可以瀏覽訪問。這里可以將該網頁的css文件也發(fā)起一次請求,可以將本地文件也保存到本地。這樣,這里一共需要兩次發(fā)起網頁請求,兩次保存網頁的操作,這里給出實例代碼。

雖然將網頁css保存到了本地,打開網頁是可以正常瀏覽的,應為原始網頁只有一個css文件,且該文件使用的是絕對路徑的網址,如圖所示。任務二將請求到的網頁保存到本地–任務實施

雖然將網頁css保存到了本地,打開網頁是可以正常瀏覽的,應為原始網頁只有一個css文件,且該文件使用的是絕對路徑的網址,如圖所示。程序的運行結果如圖。任務二將請求到的網頁保存到本地–任務拓展

雖然將網頁css保存到了本地,打開網頁是可以正常瀏覽的,應為原始網頁只有一個css文件,且該文件使用的是絕對路徑的網址,如圖所示。使用urllib庫向指定網址“/get”發(fā)起請求,將返回的響應頭保存到數據庫,使用下面代碼創(chuàng)建數據庫表。--數據庫:`httpbin`--------表的結構`httpbindata`--CREATETABLEIFNOTEXISTS`httpbindata`(`id`int(20)NOTNULLAUTO_INCREMENT,`data`textNOTNULL,PRIMARYKEY(`id`))ENGINE=MyISAMDEFAULTCHARSET=utf8AUTO_INCREMENT=2;----轉存表中的數據`httpbindata`--任務二將請求到的網頁保存到本地–任務拓展這里給出Python的代碼。importpymysqlimporturllib.requesturl='/get'response=urllib.request.urlopen(url)response=response.read().decode('utf-8')conn=pymysql.Connect(host='',port=3306,user='root',password='root',db='httpbin')cursor=conn.cursor()#獲取游標sql="insertintohttpbindata(data)values(%s);"print(response)try:cursor.execute(sql,(response))mit()print("數據插入成功")exceptExceptionasresult:print("數據插入失敗:"+str(result))謝謝項目二使用正則表達式提取網頁中內容

項目要

求本項目學習正則相關的知識,將保存到本地的網頁使用正則表達式提取有用的信息。

項目分

析要實現此任務,需要有HTML、CSS、JSON、JavaScript等知識,同時還需要了解HTTP請求的相關知識,網頁信息獲取過程需要一些解析工具以及正則表達式的知識,同時還需要網頁開發(fā)相關的知識。本項目介紹Web初步知識、HTTP請求、正則表達式等。

項目目

標【知識目標】熟悉HTML,掌握CSS和Javascipt的基礎知識以及Re正則表達式?!灸芰δ繕恕繒褂谜齽t表達式提取網頁中的內容?!舅刭|目標】提高學生的發(fā)現問題、分析問題、解決問題的能力。

知識導

圖任務一網頁展示偉大抗疫精神--任務演示本任務是使用CSS基礎知識,展示偉大抗疫精神,下圖圖片實現的效果。任務一

認識爬蟲及Python的安裝–知識準備CSS基礎知識CSS樣式選擇器HTML基礎知識1.HTML基礎知識HTML(HyperTextMarkupLanguage)稱為超文本標記語言,是一種描述文檔結構的標記語言,它是一種應用非常廣泛的網頁格式,也是最早被用來顯示網頁的語言之一。注意:HTML不是編程語言,它只是一門網頁標記語言。Web瀏覽器能讀懂HTML文件,并以網頁顯示顯示出來。1.HTML基礎知識(1)標記的格式HTML中的標記的主要作用是用來控制網頁的顯示方式,標記一般有<…>和</…>組成,<…>一般是標記的開頭,中間的省略號表示其他字符串,</…>表示標記的結束。標記分為雙標記和單標記。雙標記要求<…>和</…>成對出現,典型的標記如下:<html>…</html><html>表示一個網頁的開始,</html>表示網頁的結束,中間的省略號表示網頁的具體內容,包含若干除<html>…</html>之外的標記和若干文字、圖片、視頻等內容。<head>…</head><head>表示一個網頁的頭部,</head>表示網頁頭部結束,中間的省略號表示一個網頁的頭部的內容。1.HTML基礎知識<title>…</title><title>表示一個網頁的標題的開始,</title>表示一個網頁的標題的結束。中間的省略號表示這個網頁標題的實際內容,該內容要求是文字內容。<body>…</body><body>表示一個網頁主體的開始,</body>表示一個網頁主體的結束,中間的省略號表示這個網頁主體的實際內容,這個內容可以包含若干標記和文字、圖片、視頻等內容。1.HTML基礎知識(2)標記的使用可以按照以下三種方式使用標記。1)<標記名>文本或超文本</標記名>舉例如下:<title>百度首頁</title>注意:超文本是用超鏈接的方法,將各種不同的位置的文字信息組織在一起,形成一個網狀文本。這里超練級是指鏈接的載體和鏈接的目標地址兩個部分的內容。鏈接的載體指的是顯示鏈接的部分,即包含超鏈接的文字或圖像。鏈接的目標是指單擊超鏈接后所顯示的內容。例如<ahref=“/”>百度</a>就構成了一個超鏈接。2)<標記名屬性名1=“屬性值1”屬性名2=“屬性值2”>文本或超文1.HTML基礎知識3)<標記名>舉例如下:<hr>該標簽表示在HTML頁面中創(chuàng)建一條水平線。注意:HTML標記及屬性中字母是不區(qū)分大小寫的,標記名與左尖括號之間是不能留空白的,標記中用到雙引號的地方都是英文中的引號。2.CSS基礎知識CSS指層疊樣式表(CascadingStyleSheets),同樣CCS也不是編程語言,CSS用來告訴瀏覽器如何指定樣式、布局等。(1)CSS樣式表的分類在HTML中使用CSS樣式,主要有三種做法:1)行內式設置HTML標簽的時候,設置該標簽的style屬性,style屬性就是包含了樣式。其一般格式為:<標簽名style=”屬性1:值1;…屬性n:值n;”>內容</標簽名>舉例如下:<pstyle=”font-size:16px;color:red”>這是一段文字</p>2.CSS基礎知識如果我們把它放到一個網頁中,會是什么樣的一個效果呢?<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>我的首頁</title></head><body><pstyle="font-size:16px;color:red">這是一段文字</p></body></html>2.CSS基礎知識運行程序,效果如下。2.CSS基礎知識2)內部樣式表什么是內部樣式表呢?內標樣式表是在HTML中的head標簽中定義style標簽,在其中書寫樣式。內部樣式表意味著CSS樣式存在HTML的內部,作用范圍是只對所在的網頁有效。2.CSS基礎知識

<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>我的首頁</title><styletype="text/css">p{font-size:20px;color:blue;}</style></head><body><p>這是一段文字</p></body></html>注意:內部樣式表只是實現了CSS和HTML的部分分離,沒有實現完全分離。2.CSS基礎知識3)外部樣式表外部樣式表顧名思義,是將樣式表和HTML文件完全分離。在HTML文件內部,一般借助于link標簽將CSS引入。index.html文件的內容如下:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>我的首頁</title><linkrel="stylesheet"type="text/css"href="style.css"></head><body><p>這是一段文字</p></body></html>2.CSS基礎知識3)外部樣式表style.css文件的內容如下:p{font-size:24px;color:green;text-align:center;}注意:index.html文件和style.css文件應該確保在同一個目錄下。外部樣式表可以同時作用到多個HTML文件。運行程序,結果如下:3.CSS選擇器3)外部樣式表什么是選擇器呢?每一條css樣式定義由兩部分組成,形式如下:選擇器{樣式}在{}之前的部分就是“選擇器”?!斑x擇器”指明了{}中的“樣式”的作用對象,也就是“樣式”作用于網頁中的哪些元素。CSS主要四種基本選擇器,他們分別是標簽選擇器、類選擇器、ID選擇器以及通用選擇器。3.CSS選擇器(1)CSS標簽選擇器一個完整的HTML頁面是有很多不同的標簽組成,而標簽選擇器,則是決定哪些標簽采用相應的CSS樣式。CSS標簽選擇器主要有div、h1、p、body、ul、li等等,下面通過一個例子來加以說明。3.CSS選擇器<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><styletype="text/css">h1{text-align:center;}p{text-indent:2em;line-height:26px;font-size:16px;}</style><title>韓國使用高科技公交車候車亭對抗新冠疫情</title></head><body><h1>韓國使用高科技公交車候車亭對抗新冠疫情</h1><p>韓國正在使用高科技的公共汽車候車亭來防止Covid-19的傳播。這10個"智能候車亭"配備了用于檢查溫度的外部熱像儀和內部的紫外線消毒燈。首都首爾市城東區(qū)主要公交線路沿線都安裝了太陽能供電的候車亭。乘客必須站在一個自動熱成像攝像頭前,只有當檢測到溫度低于99.5F時,滑動門才會打開。下方還安裝有另一個攝像頭,用于檢測兒童。</p><p>玻璃板結構內有紫外線燈,還有空調、洗手液分配器和免費無線網絡。此外,還設有大型顯示屏,顯示公交車的預計到站時間和附近的交通情況。即使有這些預防措施,也建議乘客隨時戴上口罩,并保持至少一米的距離。每個公共汽車候車亭每天約有300至400人使用。</p></body></html>3.CSS選擇器運行程序,結果如下:3.CSS選擇器(2)類選擇器類選擇用使用"."(英文點號)進行標識,后面緊跟類名。.news_title{text-align:center;}3.CSS選擇器運行程序,結果如下:3.CSS選擇器(3)CSS的ID選擇器類選擇用使用"#"(英文點號)進行標識,后面緊跟ID名。#news_title{text-align:center;}3.CSS選擇器運行程序,結果如下:3.CSS選擇器(4)通用選擇器通用選擇器可以選擇頁面上的所有元素,并對它們應用樣式,用*來表示,下面通過一個例子加以說明。3.CSS選擇器運行程序,結果如下:任務一認識爬蟲及Python的安裝–任務實施

根據前面所學習的知識,我們這里設計一個網頁,來對中國偉大抗疫精神作一個展示,這里給出參考代碼。參考代碼請參考教材。任務一認識爬蟲及Python的安裝–任務拓展

有了CSS的基本知識以后,這里再簡單介紹一下JavaScript的基礎知識。JavaScript語言的引入主要有網頁中直接插入和外部引入兩種方式。(1)網頁中直接插入任務一認識爬蟲及Python的安裝–任務拓展

有了CSS的基本知識以后,這里再簡單介紹一下JavaScript的基礎知識。JavaScript語言的引入主要有網頁中直接插入和外部引入兩種方式。(1)網頁中直接插入任務一認識爬蟲及Python的安裝–任務拓展運行程序,結果如圖所示。任務一認識爬蟲及Python的安裝–任務拓展

(2)網頁中從外部引入JavaScript代碼

引用外部JavaScript代碼,可以是JavaScript代碼和HTML文件相分離、一個JavaScript文件可被多個HTML文件使用,同時使得JavaScript代碼的維護也更加方便。外部引用JavaScript文件,是使用script的src屬性,設置JavaScript文件的URL就可以了。<scriptsrc=“xxx.js”></script>任務一認識爬蟲及Python的安裝–任務拓展把上個例子中的JavaScript代碼抽成一個JavaScript文件,名字為demo.js,具體代碼如下:

varnum=0;functionfun(id){vars=document.getElementById(id).value;num=num+1;alert(s+"我被點擊了"+num+"次");}任務一認識爬蟲及Python的安裝–任務拓展<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><scriptsrc="demo.js"></script>為button綁定點擊事件:<divclass="box1"><inputtype="button"onclick="fun(this.id)"id="a"class="btn1"value="統(tǒng)計點擊次數,請點我"></div></body>任務一認識爬蟲及Python的安裝–任務拓展<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><scriptsrc="demo.js"></script>為button綁定點擊事件:<divclass="box1"><inputtype="button"onclick="fun(this.id)"id="a"class="btn1"value="統(tǒng)計點擊次數,請點我"></div></body>任務一認識爬蟲及Python的安裝–任務拓展運行程序,結果如下:任務二使用正則表達式提取指定的內容--任務演示本任務是給定了一個字符文本,該文本由若干英文單詞組成,每個英文單詞由空格進行了分割,請使用正則表達式將所有的單詞給提取出來,如圖所示。任務二將請求到的網頁保存到本地–知識準備正則表達式的使用正則表達式的基本語法1正則表達式的基本語法Python語言通過標準庫中的re模塊支持正則表達式Re模塊提供了一些根據正則表達式進行查找、替換、分割字符串的函數,這些函數使用一個正則表達式作為第一個參數。Re模塊常用的函數如表所示。函數描述match(pattern,string,flags=0)根據pattern從string的頭部開始匹配字符串,只返回第1次匹配成功的對象;否則,返回Nonefindall(pattern,string,flags=0)根據pattern在string中匹配字符串。如果匹配成功,返回包含結果的列表;否則,返回空列表。當pattern中有分組時,返回包含多個元組的列表,每個元組對應1個分組。Falgs表示規(guī)則選項,規(guī)則選項用于輔助匹配。sub(pattern,repl,string,count=0)根據指定的正則表達式,替換源字符中的子串。Pattern是一個正則表達式,repl是用于替換的字符串,string是源字符串。如果count等于0,則返回sring中匹配的的所有結果;如果count大于0,則返回前count個匹配結果。subn(pattern,repl,string,count=0)作用和sub()相同,返回一個二元的元組。第1個元素是替換結果,第2個元素是替換的次數。search(pattern.flags=0)根據pattern在string中匹配字符串,只返回第一次匹配成功的對象。如果匹配失敗,返回None。complie(pattern,flags=0)編譯正則式pattern,返回1個pattern的對象。split(pattern,string,maxplit=0)根據pattern分隔string,maxplit表示最大的分隔數。escape(pattern)匹配字符串中的特殊字符,如*、+、?等1正則表達式的基本語法(1)match()方法re.match()嘗試從字符串的起始位置開始匹配一個模式,如果不是起始位置匹配成功的話,就返回None,否則返回一個對象,函數原型為:re.match(pattern,string,flag=0)函數的參數說明如下表所示:參數描述pattern匹配的正則表達式string要匹配的字符串flags標志位,用于控制正則表達式的匹配方式,如:是否區(qū)分大小寫,多行匹配等。也可以理解成修飾符,具體修飾符參閱表2.6所示。1正則表達式的基本語法(1)match()方法

正則表達式在使用中還用到修飾符,修飾符也叫標記,標記用于指定額外的匹配策略。標記不寫在正則表達式里,標記位于表達式之外,常用的正則表達式修飾符如表所示。修飾符描述re.I使匹配對大小寫不敏感re.L做本地化識別匹配re.M多行匹配,影響^和$re.S使.匹配包括換行在內的所有字符re.U根據Unicode字符集解析字符。這個標志影響\w,\W,\b,\B.re.X該標志通過給予你更靈活的格式以便你將正則表達式寫得更易于理解。1正則表達式的基本語法對match()函數的使用,舉例如下。01importre02str1=""03str2="www"04str3="com"05print(re.match(str2,str1,re.I))06print(re.match(str3,str1))運行程序,結果如圖:1正則表達式的基本語法(2)search()方法search掃描整個字符串并返回第一個成功的匹配,如果匹配失敗,則返回None,該方法的原型為:re.search(pattern,string,flags=0)pattern參數表示正則中的模式字符串;string參數表示要被查找替換的原始字符串;flags參數表示標志位,用于控制正則表達式的匹配方式。1正則表達式的基本語法(2)search()方法看一個例子:01importre02str1=""03str2="www"04str3="com"05str4="baidu"06print(re.search(str2,str1,re.I))07print(re.search(str3,str1))08print(re.search(str4,str1))運行程序,結果如圖。1正則表達式的基本語法(3)findall()方法findall方法與search方法比較類似,findall方法可以遍歷匹配,可以獲取字符串中所有匹配的字符串,將找到的結果返回到一個列表中,如果找不到,返回的是一個空列表,該函數的原型為:findall(pattern,string,flags=0)pattern參數表示正則中的模式字符串,就是正則表達式;string參數表示要被查找替換的原始字符串;flags參數表示標志位,用于控制正則表達式的匹配方式。注意:findall()函數是逐行匹配的。返回string中所有與pattern相匹配的全部字串,返回形式為列表。1正則表達式的基本語法看一個例子:01importre02str1=",WWW.G.CN"03str2="www"04str3="com"05str4="baidu"06print(re.findall(str2,str1,re.I))07print(re.findall(str3,str1))08print(re.findall(str4,str1))09print(re.findall("GG",str1))運行程序,結果如下:1正則表達式的基本語法(4)sub()函數Python的re模塊提供了re.sub用于替換字符串中的匹配項,該函數將匹配上的字符串替換成指定的字符串,返回新的字符串,該函數的原型為:sub(pattern,repl,string,count=0,flags=0)參數說明:pattern:正則表達式。repl:替換的字符串,也可以是一個函數。string:要被查找替換的原始字符串。count:模式匹配后替換的最大次數,默認0表示替換所有的匹配。flags:編譯時用的匹配模式,數字形式。注意:sub()函數的前三個參數為必填參數,后兩個參數為可選參數。1正則表達式的基本語法舉例如下:01importre02phone="400-889-9315#這是美的售后客服電話"03#刪除注釋04num=re.sub(r'#.*$',"",phone)05print("美的客服電話為:",num)06#將非數字的‘-’去掉07num=re.sub(r'\D',"",phone)08print("美的客服電話為:",num)1正則表達式的基本語法舉例如下:01importre02phone="400-889-9315#這是美的售后客服電話"03#刪除注釋04num=re.sub(r'#.*$',"",phone)05print("美的客服電話為:",num)06#將非數字的‘-’去掉07num=re.sub(r'\D',"",phone)08print("美的客服電話為:",num)注意:python中,字符串前面加r或者R前綴,目的是禁用轉義符“\”的功能。運行程序,結果如圖所示。1正則表達式的基本語法(5)compile()函數

在Pytohn使用正則表達式時,re模塊內部會做兩件事情:第一,是對正則表達式進行編譯,如果此時正則表達式不合法,就會報錯;第二,用編譯好的正則表達式去匹配字符串。如果一個正則表達式使用的頻率很高,那么,我們就有必要對該正則表達式先確保編譯好,然后使用的使用的時候,告訴編譯器不需要再編譯了,可以執(zhí)行匹配操作了。這樣一來,執(zhí)行效率就得到了提高。Python的re模塊,針對這個應用場景,為我們提供了compile()函數。1正則表達式的基本語法01importre02re_telephone=pile(r'^(\d{3})-(\d{3,8})$')#編譯03A=re_telephone.match('010-12345').groups()#使用04print(A)#結果('010','12345')05B=re_telephone.match('010-8086').groups()#使用06print(B)#結果('010','8086')運行程序,結果如圖。任務二將請求到的網頁保存到本地–任務實施

給定了一個字符串str,該字符串由若干英文單詞組成,每個英文單詞由空格進行了分割,請使用正則表達式將所有的單詞給提取出來。importres='Weshouldneverrememberthebenefitswehaveofferednorforgetthefavorreceived'pat=r'\s?([a-zA-Z]+)'r=re.findall(pat,s)print(r)運行程序,結果如下:Weshouldneverrememberthebenefitswehaveofferednorforgetthefavorreceived.上面的英語翻譯為如下:自己的好事別去提,別人的恩惠要銘記。這句話告訴我們,自己做了好事,別到處宣揚,不用你說,別人會看在眼里的,也許當下沒有得到回報,但你所做的好事,在關鍵時刻會助你一臂之力。任務二將請求到的網頁保存到本地–任務拓展

將前面?zhèn)ゴ罂挂呔窬W頁的的“生命至上、舉國同心、舍生忘死、尊重科學、命運與共”二十字精神使用Re正則表達式給提取出來。任務二將請求到的網頁保存到本地–任務實施

雖然將網頁css保存到了本地,打開網頁是可以正常瀏覽的,應為原始網頁只有一個css文件,且該文件使用的是絕對路徑的網址,如圖所示。程序的運行結果如圖。任務二將請求到的網頁保存到本地–任務拓展

雖然將網頁css保存到了本地,打開網頁是可以正常瀏覽的,應為原始網頁只有一個css文件,且該文件使用的是絕對路徑的網址,如圖所示。

使用urllib庫向指定網址“/get”發(fā)起請求,將返回的響應頭保存到數據庫,使用下面代碼創(chuàng)建數據庫表。--數據庫:`httpbin`--------表的結構`httpbindata`--CREATETABLEIFNOTEXISTS`httpbindata`(`id`int(20)NOTNULLAUTO_INCREMENT,`data`textNOTNULL,PRIMARYKEY(`id`))ENGINE=MyISAMDEFAULTCHARSET=utf8AUTO_INCREMENT=2;----轉存表中的數據`httpbindata`--任務二將請求到的網頁保存到本地–任務拓展這里給出Python的代碼。importpymysqlimporturllib.requesturl='/get'response=urllib.request.urlopen(url)response=response.read().decode('utf-8')conn=pymysql.Connect(host='',port=3306,user='root',password='root',db='httpbin')cursor=conn.cursor()#獲取游標sql="insertintohttpbindata(data)values(%s);"print(response)try:cursor.execute(sql,(response))mit()print("數據插入成功")exceptExceptionasresult:print("數據插入失?。?+str(result))任務二將請求到的網頁保存到本地–任務拓展運行程序,結果如圖。謝謝項目三網絡爬蟲初步之爬取豆瓣電影TOP250欄目

項目要

求本項目將使用Urllib2框架將網頁內容進行爬取,使用BeautiflSoup4將數據從HTML中提取出來,讓后將提取出來的數據放到EXCEL表格和SQLite數據庫中保存,從而實現數據的可持續(xù)化存儲。

項目分

析要完成項目任務,用到了Urllib請求網頁,對接收到的響應內容使用BeautiflSoup4模塊進行提取,數據持久化存儲這里使用到了SQLite輕量級數據庫。

項目目

標【知識目標】熟悉Urllib,掌握BeautiflSoup4的基礎知識、SQLite和Excel的使用?!灸芰δ繕恕繒褂肬rllib請求網頁、會使用BeautiflSoup4框架提取網頁內容,會使用Sqlite和Excel進行數據的持久化存儲?!舅刭|目標】提高學生的發(fā)現問題、分析問題、解決問題的能力。

知識導

圖任務一Urllib框架請求網頁--任務演示本任務是使用Python內置的HTTP請求庫Urllib向服務器發(fā)出HTTP請求,然后將請求的網頁進行打印輸出。任務一Urllib框架請求網頁–知識準備爬蟲開發(fā)的基本流程字符的編碼和解碼爬蟲開發(fā)的基本流程1.爬蟲開發(fā)的基本流程

根據網絡爬蟲開發(fā)的基本步驟是先向服務器發(fā)起HTTP請求,然后將請求到的網頁進行解析,最后將得到的數據進行保存,因此開發(fā)一個網路爬蟲的基本流程,可以總結如下:(1)準備工作通過瀏覽器查看分析目標網頁,學習編程基礎規(guī)范。(2)獲取數據通過HTTP庫向目標站點發(fā)起請求,請求可以包含額外的header等信息,如果服務器能正常響應,會得到一個Response,便是所要獲取的頁面內容。1.爬蟲開發(fā)的基本流程(3)解析內容

得到的內容可能是HTML\JSON等格式,可以使用頁面解析庫、正則表達式等進行解析。(4)保存數據

保存形式多樣,可以存為文本,也可以保存到數據庫,或者保存特定格式的文件。2.Urllib框架的基本使用Urllib是Python內置的HTTP請求庫,該庫主要用來請求網絡資源。Urllib庫主要有4個模塊,具體模塊功能如下:模塊功能備注urllib.request請求模塊,用于發(fā)起網絡請求

urllib.parse解析模塊,用于解析URL

urllib.error異常處理模塊,用于處理request引起的異常

urllib.robotparserrobots.txt用于解析robots.txt文件

【大家注意】在Python2.X中,有Urllib庫,也有Urllib2庫,但是在最新的Python3.X中,將Urllib2合并到了Urllib中,這個庫在我們爬取網頁的時候會經常用到。Urllib庫不需要安裝,只要導入就可以使用了。2.Urllib框架的基本使用

(1)urllib.request模塊request模塊主要負責構造和發(fā)起網絡請求,并在其中添加Headers(請求頭)、Proxy(IP代理)等。利用它可以模擬瀏覽器的請求發(fā)起過程。該模塊主要有發(fā)起網絡請求、操作Cookie、添加Headers、使用代理等功能。2.Urllib框架的基本使用1)發(fā)起網絡請求urllib.request中主要有urlopen()函數,該函數的原型為:urllib.request.urlopen(url,data=None,[timeout,]*,cafile=None,capath=None,cadefault=False,context=None)url:需要訪問的網址data:Post提交的數據,默認為None,發(fā)送一個GET請求到指定的頁面,當data不為None時,發(fā)送的是POST請求。Timeout請求的超時參數,單位為秒。可選的cafile和capath參數為HTTPS請求指定一組可信的CA證書。cafile應指向包含一系列CA證書的單個文件,而capath應指向散列證書文件的目錄。cadefault參數被忽略。urlopen返回對象提供以下八個方法,如表所示。2.Urllib框架的基本使用方法功能read()對HTTPResponse類型數據進行操作,獲取返回的數據readline()對HTTPResponse類型數據進行操作,讀取一行readlines()對HTTPResponse類型數據進行操作,獲取多行fileno()對HTTPResponse類型數據進行操作close()對HTTPResponse類型數據進行操作info()返回HTTPMessage對象,表示遠程服務器返回的頭信息getcode()返回Http狀態(tài)碼。如果是http請求,200請求成功完成;404網址未找到geturl()返回請求的url

這里首先給出一個請求網頁的例子,使用了GET方法。01importurllib.request02url=''03response=urllib.request.urlopen(url)04print(response.read())2.Urllib框架的基本使用再來看一個GET請求的例子:01importurllib.request02importurllib.parse03response=urllib.request.urlopen("/get")04print(response.read().decode("utf-8"))運行程序,結果如下:{"args":{},"headers":{"Accept-Encoding":"identity","Host":"","User-Agent":"Python-urllib/3.7","X-Amzn-Trace-Id":"Root=1-5f2f5457-0d128690cb4472f0da71b820"},"origin":"2","url":"/get"}2.Urllib框架的基本使用給出使用urllib.request請求網頁超時的例子,如下所示。01importurllib.request02url=''03try:04response=urllib.request.urlopen(url,0.01)05print(response.read())06exceptExceptionasresult:07print(result)urlopen方法會默認會發(fā)送get請求,當傳入data參數時,則會發(fā)起POST請求。這里給出使用urllib.requst的POST請求的例子。01importurllib.request02url=''03data=b"Python"04try:05response=urllib.request.urlopen(url,data=data)06print(response.read())07exceptExceptionasresult:08print(result)2.Urllib框架的基本使用2)操作CookieCookie是瀏覽器支持的一種本地存儲機制。一般由服務端設置生成,在響應請求時被自動存儲在瀏覽器中。urllib.request可以對Cookie進行操作,下面給出一個例子。01fromurllibimportrequest02fromhttpimportcookiejar03#創(chuàng)建一個cookie對象04cookie=cookiejar.CookieJar()05#創(chuàng)一個cookie處理器06cookies=request.HTTPCookieProcessor(cookie)07#以它為參數,創(chuàng)建opener對象08opener=request.build_opener(cookies)09#使用這個opener來發(fā)請求10res=opener.open('/')11print(cookies.cookiejar)2.Urllib框架的基本使用3)設置代理運行爬蟲的時候,經常會出現被封IP的情況,這時我們就需要使用ip代理來處理,urllib的IP代理的設置的范例代碼如下。01fromurllibimportrequest02proxy='46:9999'03proxy_support=request.ProxyHandler({'http':proxy})04opener=request.build_opener(proxy_support)05request.install_opener(opener)06result=request.urlopen('')07print(result)2.Urllib框架的基本使用4)添加Headers為了讓被爬取的網頁所在的服務器不被識別到是爬蟲,還可以偽裝請求頭。就是使用已有瀏覽器的請求頭,來請求網頁,具體的范例代碼如下。01importurllib.request02url=""03#注意:在urllib中這種的headers是需要是字典的04headers={"User-Agent":"Mozilla/5.0(WindowsNT6.1;WOW64;rv:6.0)Gecko/20100101Firefox/6.0"}05req=urllib.request.Request(url=url,headers=headers)06file=urllib.request.urlopen(req)07print(file.read())2.Urllib框架的基本使用(2)urllib.parse模塊url.parse模塊定義了url的標準接口,實現url的各種抽取。parse模塊的使用:url的解析,合并,編碼,解碼。url.parse模塊包含了urlparse函數,該函數主要是用于解析url中的參數,對url按照一定格式進行拆分或拼接。urlparse()把url拆分為6個部分,scheme(協(xié)議),netloc(域名),path(路徑),params(可選參數),query(連接鍵值對),fragment(特殊錨),并且以元組形式返回。下面通過一個例子來加以說明。2.Urllib框架的基本使用01fromurllibimportparse02url='/weixin_43831576/article/details/84582424?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-10.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-10.channel_param'03"""04url:待解析的url05scheme='':假如解析的url沒有協(xié)議,可以設置默認的協(xié)議,如果url有協(xié)議,設置此參數無效06allow_fragments=True:是否忽略錨點,默認為True表示不忽略,為False表示忽略07"""08result=parse.urlparse(url=url,scheme='http',allow_fragments=True)09print(result)10print(result.scheme)該段程序運行結果為:ParseResult(scheme='https',netloc='',path='/weixin_43831576/article/details/84582424',params='',query='utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-10.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-10.channel_param',fragment='')https2.Urllib框架的基本使用url.parse模塊還包含了對url的構造函數,該函數為urlunparse(),請看下面的實例。運行結果如圖所示:2.Urllib框架的基本使用(3)urllib.error模塊我們在爬蟲的時候發(fā)請求的時候難免出現各種錯誤,如訪問不到服務器或者訪問被禁止等等,出錯了之后urllib將錯誤信息封裝成了一個模塊對象中,這個模塊就叫error模塊。urllib.error模塊定義由urllib.request引發(fā)的異常類。異常處理主要用到兩個類,urllib.error.URLError和urllib.error.HTTPError。URLError是urrlib.error異常類的基類,具有reason屬性,返回錯誤原因??梢圆东@由urllib.request產生的異常。引起該異常的主要原因是服務器連接失敗、服務器故障、遠程URL地址不存在以及觸發(fā)了HTTPError等。下面通過一個例子加以說明。01fromurllibimportrequest,error02url="https://www.baidu.cpm/"03try:04response=request.urlopen(url)05print(response.read())06excepterror.URLErrorasresult:07print(result)2.Urllib框架的基本使用上面例子中,請求一個不存在的網址,就觸發(fā)了一個異常。運行結果如圖所示:下面我們通過請求一個存在的網址,但是請求的具體頁面不存在,我們使用這個HTTPError異常來進行捕獲一下,請看下面的例子。01fromurllibimportrequest,error02url="/s/1232323xxxx"03try:04response=request.urlopen(url)05print(response.read())06excepterror.HTTPErrorasresult:07print(result)2.Urllib框架的基本使用運行該程序,結果如圖。(4)urllib.robotparserrobots.txt模塊robots.txt一般指robots協(xié)議。robots協(xié)議也叫robots.txt(統(tǒng)一小寫)是一種存放于網站根目錄下的ASCII編碼的文本文件,它通常告訴網絡搜索引擎的漫游器(又稱網絡蜘蛛),此網站中的哪些

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論