Python網(wǎng)絡(luò)爬蟲項(xiàng)目式教程錢游課后參考答案_第1頁
Python網(wǎng)絡(luò)爬蟲項(xiàng)目式教程錢游課后參考答案_第2頁
Python網(wǎng)絡(luò)爬蟲項(xiàng)目式教程錢游課后參考答案_第3頁
Python網(wǎng)絡(luò)爬蟲項(xiàng)目式教程錢游課后參考答案_第4頁
Python網(wǎng)絡(luò)爬蟲項(xiàng)目式教程錢游課后參考答案_第5頁
已閱讀5頁,還剩11頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

復(fù)習(xí)題一、單項(xiàng)選擇題1、以下哪些是爬蟲技術(shù)可能存在風(fēng)險(D)A、大量占用爬去網(wǎng)站的資源B、網(wǎng)站敏感信息的獲取造成的不良后果C、違背網(wǎng)站爬去設(shè)置D、以上都是下列不是urllib庫的四大模塊的是(C)A、urllib.requestB、urllib.errorC、urllib.sessionD、urllib.robotparser二、判斷題1、urllib是python內(nèi)置的處理HTTP請求的庫。(對)2、urllib的request模塊可以非常方便地抓取URL內(nèi)容,可以通過發(fā)送一個GET請求,獲取到網(wǎng)頁的內(nèi)容。(對)3、MongoDB是關(guān)系型數(shù)據(jù)庫。(錯)4、爬取網(wǎng)頁數(shù)據(jù)的時候必須遵守robots.txt協(xié)議。(錯)5、定期更改網(wǎng)站結(jié)構(gòu)進(jìn)行可以一定程度上防止網(wǎng)頁數(shù)據(jù)被爬取。(對)三、簡答題1、請簡要回答什么網(wǎng)絡(luò)爬蟲。網(wǎng)絡(luò)爬蟲,又稱為網(wǎng)頁蜘蛛,網(wǎng)絡(luò)機(jī)器人,是一種按照一定的規(guī)則,自動請求萬維網(wǎng)網(wǎng)站并提取網(wǎng)絡(luò)數(shù)據(jù)的程序或腳本。2、請回答開發(fā)和使用網(wǎng)絡(luò)爬蟲的好處。爬蟲的出現(xiàn)在一定的程度上代替了手工訪問網(wǎng)頁,能夠?qū)崿F(xiàn)自動化采集互聯(lián)網(wǎng)的數(shù)據(jù),以更高地效率去利用互聯(lián)網(wǎng)中的有效信息。復(fù)習(xí)題一、單項(xiàng)選擇題1、HTTP協(xié)議的全稱是(D)A、文件傳輸協(xié)議 B、郵件傳輸協(xié)議C、遠(yuǎn)程登錄協(xié)議D、超文本傳輸協(xié)議2、正則表達(dá)式R+[0-9]{3},能匹配出以下哪個字符串(D) A、R3 B、039 C、R09 D、RR0933、以下正則表達(dá)式中,屬于非貪婪匹配,且允許出現(xiàn)0次的是(C) A、. B、.* C、.*? D、.+?4、下列選項(xiàng)中,發(fā)起HTTP請求成功后,服務(wù)器響應(yīng)的狀態(tài)碼是(A) A、200 B、303 C、404 D、500二、判斷題1、在python中,一般我們會使用re模塊來實(shí)現(xiàn)Python正則表達(dá)式的功能。(對)2、re.search(pattern,string,flags=0)函數(shù)是掃描整個整個字符串,并返回第一個匹配成功的。(對)3、re.findall(pattern,string,flags=0)函數(shù)是掃描整個字符串,并將結(jié)果以字典形式返回。(錯)4、sub(pattern,repl,string,count=0,flags=0)函數(shù)用于字符串中的匹配項(xiàng),該函數(shù)將匹配上的字符串替換成指定的字符串,返回新的字符串。(對)5、re.I表示做多行匹配.(錯)三、編程題1、拆分字符串,將下面詩中的每一句話分別提取出來。shici=‘李白乘舟將欲行,忽聞岸上踏歌聲。桃花潭水深千尺,不及汪倫送我情?!瘏⒖即a:shici='李白乘舟將欲行,忽聞岸上踏歌聲。桃花潭水深千尺,不及汪倫送我情。'

result=shici.split(r',')

result=shici.split(r'。')

foriteminresult:

print(item)2、提取用戶輸入數(shù)據(jù)中的數(shù)據(jù)(數(shù)值包含正數(shù)和負(fù)數(shù)在內(nèi)的實(shí)數(shù))并求和,例如字符串為:str1='-6.94hello87nice100bye',則和為-6.94+87+100=180.06,請編寫程序?qū)崿F(xiàn)。importre

#str1='-3.14good87nice19bye'

nums=re.findall(r'-?\d+\.?\d*',str1)

result=sum([float(x)forxinnums])

print(result)復(fù)習(xí)題一、單項(xiàng)選擇題1、關(guān)于HTTP相關(guān)協(xié)議,以下說法錯誤的是(C)A、HTTPS在HTTP的基礎(chǔ)上加入了SSL協(xié)議B、HTTP全過程分為請求和響應(yīng)兩個階段C、HTTP響應(yīng)狀態(tài)碼404代表服務(wù)器正常響應(yīng)D、HTTP是應(yīng)用層協(xié)議2、用HTML標(biāo)記語言編寫一個簡單的網(wǎng)頁,網(wǎng)頁最基本的結(jié)構(gòu)是(D)A、<html><head>…</head><frame>…</frame></html>B、<html><title>…</title><body>…</body></html>C、<html><title>…</title><frame>…</frame></html>D、<html><head>…</head><body>…</body></html>3、下面哪個不是HTML標(biāo)簽名稱(D)A、linkB、tableC、formD、List4、如果當(dāng)前網(wǎng)頁請求的url是/test/images/abc.jpg,那么執(zhí)行request.url.split("/")[-1]代碼的結(jié)果是(A)A、abc.jpgB、/abc.jpgC、.jpgD、images/abc.jpg5、下面關(guān)于Xpath路徑表達(dá)式解釋錯誤的是(C)A、選取屬性id為content的div元素://div[@id='content']B、選取所有帶有屬性class的div元素://div[@class]C、選取div節(jié)點(diǎn)中的第二個p元素的文本://div/p[1]/text()D、選取div節(jié)點(diǎn)中的最后一個p元素的文本://div/p[last()]/text()6、下面哪項(xiàng)不是常用的Python數(shù)據(jù)解析方式或解析用到的包(D)A、lxmlB、bs4C、xpathD、Pymysql7、通過python網(wǎng)絡(luò)爬蟲時,關(guān)于反爬蟲的常見應(yīng)對策略,哪項(xiàng)是最不可取的(D)A、修改請求頭,模擬瀏覽器請求B、修改爬蟲間隔時間,模擬用戶“真實(shí)”瀏覽C、修改訪問IP地址,模擬多人訪問D、動用黑客手段,直接攻擊網(wǎng)站服務(wù)器8、下面是使用Python的Xpath解析頁面數(shù)據(jù)代碼,為保證運(yùn)行,空白處①和②填寫內(nèi)容分別是(B)importrequestsfromlxmlimportetreeurl=""html=requests.①(url).contentselector=etree.HTML(html)tags=selector.②('//div[@class="s-top-wrap"]')A、get、pathB、get、xpathC、select,pathD、select,xpath二、判斷題1、根據(jù)使用場景,網(wǎng)絡(luò)爬蟲可分為通用爬蟲和聚焦爬蟲兩種。(對)2、HTTP通信由兩部分組成:客戶端請求消息與服務(wù)器響應(yīng)消息。(對)3、在python3中,str轉(zhuǎn)bytes使用decode(),bytes轉(zhuǎn)str使用encode()(錯)。4、使用requests發(fā)起請求后,可以使用text和content接收響應(yīng)內(nèi)容。(對)5、xlrd庫支持xlsx格式的Excel文件的所有操作。(錯)三、編程題1、使用Urllib庫請求URL代表的網(wǎng)頁,使用正則表達(dá)式解析網(wǎng)頁內(nèi)容,打印輸出該網(wǎng)頁的標(biāo)題和正文內(nèi)容。URL=”/zwxx_176/bmdt/202104/t20210406_9072956.html”參考代碼:importurllib.request,re

try:

url="/zwxx_176/bmdt/202104/t20210406_9072956.html"

headers={

"User-Agent":

"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/86.0.4240.42Safari/537.36Edg/86.0.622.19"

}

req=urllib.request.Request(url=url,headers=headers)#req=request封裝請求信息

response=urllib.request.urlopen(req)#傳入封裝的req請求信息,再獲取響應(yīng)

data=response.read().decode("utf-8")

#獲取標(biāo)題

reg='<title>(.*?)</title>'

title=re.findall(reg,data,re.S|re.M)

print("標(biāo)題:",title[0])

#獲取文章內(nèi)容

reg='<divclass="viewTRS_UEDITORtrs_paper_defaulttrs_web">(.*?)</div>'

content=re.findall(reg,data,re.S|re.M)

print("正文內(nèi)容:",content[0])

exceptExceptionasex:#捕獲異常

print(f"{ex}報錯了!")復(fù)習(xí)題一、單項(xiàng)選擇題1、下面有關(guān)Requests庫說法不正確的是(D)A、Requests是Python的一個HTTP請求庫B、在Windows下安裝可以使用命令“pipinstallrequests”C、在Linux下安裝可以使用命令“sudopipinstallrequests”D、Requests庫的GET請求不能攜帶參數(shù)(D)2、假定響應(yīng)對象為r,關(guān)于Requests庫通過以下方法獲取響應(yīng)內(nèi)容不正確的是(D)A、r.status_code表示響應(yīng)轉(zhuǎn)態(tài)碼B、r.raw表示原始響應(yīng)體,使用r.raw.read()讀取C、r.text表示字符串方式的響應(yīng)體,會自動根據(jù)響應(yīng)頭部的字符編碼進(jìn)行解碼。D、r.url表示獲取網(wǎng)頁中的所有網(wǎng)址二、判斷題1、通用網(wǎng)絡(luò)爬蟲常用串行工作方式。(錯)2、需要登錄的網(wǎng)站一般通過GET請求就可以實(shí)現(xiàn)登錄。(錯)3、代理中間件的可用代理列表一定要寫在setting.py中。(錯)4、所有的異步加載都會向后臺發(fā)送請求。(錯)5、requests中g(shù)et請求方法的使用為requests.get(url).(對)三、編程題1、使用requests請求框架和BeautifulSoup解析框架,爬取以下Url變量所指定的網(wǎng)頁,獲取其網(wǎng)頁的標(biāo)題和新聞內(nèi)容。Url=/zwxx_176/bmdt/202104/t20210406_9072956.html”參考代碼:#1.利用requests.get(url)獲取網(wǎng)頁頁面的html文件

importrequests

newsurl='/zwxx_176/bmdt/202104/t20210406_9072956.html'

res=requests.get(newsurl)

res.encoding='utf_8'

print(res)

#2.利用BeautifulSoup的HTML解析器,生成結(jié)構(gòu)樹

frombs4importBeautifulSoup

soup=BeautifulSoup(res.text,'html.parser')

#3.找出特定標(biāo)簽的html元素

print(soup.p)#標(biāo)簽名,返回第一個

#打印網(wǎng)頁的頭部區(qū)域

print("打印網(wǎng)頁的頭部區(qū)域start")

print(soup.head)

print("打印網(wǎng)頁的頭部區(qū)域end")

#4.獲取網(wǎng)頁的標(biāo)題、新聞內(nèi)容

print("新聞的標(biāo)題是:")

title=soup.select('.tit')[0].text#返回的是是一個列表對象,使用小標(biāo)0進(jìn)行獲取,然后獲取文字內(nèi)容,使用了".text"方法

print(title)

print("新聞的內(nèi)容是:")

content=soup.select('.view')[0].text

print(content)2、使用Xpath實(shí)現(xiàn)圖書信息的爬取,網(wǎng)址為:/。要求:(1)爬取的圖書的字段有:書名、價格和評分。(2)使用XPath將所有頁的圖書信息全部爬取下來。(3)將數(shù)據(jù)保存于文件中(推薦使用csv文件)。參考代碼:importrequests

fromlxmlimporthtml

importcsv

base_url='/catalogue/'

pages=[base_url+str(i)+'.html'foriinrange(2,52)]

books=[]

forpageinpages:

page_source=requests.get(page).content.decode()

selector=html.fromstring(page_source)

titles=selector.xpath('//*[@id="default"]/div/div/div/div/section/div[2]/ol/li/article/h3/a/text()')

prices=selector.xpath('//*[@id="default"]/div/div/div/div/section/div[2]/ol/li/article/div[2]/p[1]/text()')

prices=[e[1:]foreinprices]

rating=selector.xpath('//*[@id="default"]/div/div/div/div/section/div[2]/ol/li/article/p/@class')

rating=[e.split('')[1]foreinrating]

foriinrange(len(prices)):

books.append((titles[i],prices[i],rating[i]))

print(books)

withopen("books.csv","w+")asf:

writer=csv.writer(f)

writer.writerow(('book_name','price','rating'))

writer.writerows(books)

print("處理完成")3、使用requests_html模塊請求網(wǎng)頁,請求的url地址如下,將指定網(wǎng)頁中中的所有超練級打印輸出到控制臺。參考代碼:URL=”/html/gndy/oumei/index.html”fromrequests_htmlimportHTMLSession

headers={

'user-agent':'Mozilla/5.0(WindowsNT6.1;WOW64)'

}

session=HTMLSession()

resp=session.get('/html/gndy/oumei/index.html')

resp.encoding="utf-8"

link=resp.html.xpath("http://a[@class='ulink'][2]/@href")

print("得到了該頁面的記錄條數(shù)為:",str(len(link)))

foriinrange(0,len(link)):

print(link[i])

復(fù)習(xí)題一、單項(xiàng)選擇題1、下面有關(guān)Selenium庫說法不正確的是(D)A、Selenium支持Chrome等常見瀏覽器。B、使用Selenium庫需要使用命令fromseleniumimportwebdriver。C、chromedriver的版本與Chrome瀏覽器版本有對應(yīng)關(guān)系。D、以上說法均錯誤。2、目前驗(yàn)證碼的類型有(D)A、單擊式驗(yàn)證碼B、圖形驗(yàn)證碼C、滑動驗(yàn)證碼D、以上都是二、判斷題1、Selenium是一個用于網(wǎng)站應(yīng)用程序自動化的工具,他可以直接運(yùn)行在瀏覽器中。(對)2、安裝Selenium可以使用pipinstallselenium命令來完成(對)3、Selenium可以模擬單擊、右擊操作,但是不能模擬文本輸入操作。(錯)4、Selenium支持通過id和name屬性來查找元素(對)5、使用Selenium庫必須安裝配置GoogleChrome的WebDriver。(錯)三、編程題1.請使用Selenium對對中國站長站素材欄目(/tupian/)的圖片進(jìn)行爬取。參考代碼:importurllib.parse

importurllib.request

frombs4importBeautifulSoup

importtime

importos

defhandle_request(url,page):

headers={

'User-Agent':'Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/74.0.3729.131Safari/537.36',

}

#由于第一頁和后面頁碼規(guī)律不一致,所以要進(jìn)行判斷

ifpage==1:

url=url.format('')

else:

url=url.format('_'+str(page))

#print(url)

request=urllib.request.Request(url,headers=headers)

#網(wǎng)站圖片是使用懶加載,必須要延時

response=urllib.request.urlopen(request,timeout=8).read().decode()

returnresponse

defdownload_image(image_src):

dirpath='mygudian'

#創(chuàng)建一個文件夾

print(os.path.exists(dirpath))

ifnotos.path.exists(dirpath):

os.mkdir(dirpath)

#創(chuàng)建文件名

filename=os.path.basename(image_src)

#圖片路徑

filepath=os.path.join(dirpath,filename)

#發(fā)送請求,保存圖片

headers={

'User-Agent':'Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/74.0.3729.131Safari/537.36',

}

request=urllib.request.Request(url=image_src,headers=headers)

response=urllib.request.urlopen(request)

withopen(filepath,'wb')asfp:

fp.write(response.read())

defparse_content(content):

#生成對象

image_list=[]

soup=BeautifulSoup(content,'lxml')

result=soup.find_all('img',attrs={'class':'lazy'})

forvalueinresult:

pic_url="https:"+value.attrs['data-original']

image_list.append(pic_url)

print(image_list)

#遍歷列表,依次下載圖片

forimage_srcinimage_list:

download_image(image_src)

defmain():

url='/tupian/index{}.html'

#/tupian/gudianmeinvtupian_2.html

start_page=int(input("請輸入開始頁碼:"))

end_page=int(input("請輸入結(jié)束頁碼:"))

forpageinrange(start_page,end_page+1):

print("第%s頁開始下載······"%page)

content=handle_request(url,page)

#解析內(nèi)容

parse_content(content)

time.sleep(2)

print("第%s頁下載完畢······"%page)

print("下載完成!")

if__name__=="__main__":

main()2.請使用Selenium爬蟲對QQ音樂進(jìn)行爬取。fromseleniumimportwebdriver

frommon.byimportBy

fromselenium.webdriver.support.uiimportWebDriverWait

importpandasaspd

importtime

browser=webdriver.Chrome()

wait=WebDriverWait(browser,20)

browser.get('/n/ryqq/toplist/5')

rank=[]

name=[]

singer=[]

defget_page():

forninrange(1,21):

rank.append(browser.find_element(By.XPATH,'//*[@id="app"]/div/div[2]/div[2]/div[3]/ul[2]/li[%s'%n+']/div/div[1]').text)

name.append(browser.find_element(By.XPATH,'//*[@id="app"]/div/div[2]/div[2]/div[3]/ul[2]/li[%s'%n+']/div/div[3]/span/a[2]').text)

singer.append(browser.find_element(By.XPATH,'//*[@id="app"]/div/div[2]/div[2]/div[3]/ul[2]/li[%s'%n+']/div/div[4]/a').text)

#print(rank)

browser.find_element(By.XPATH,'//*[@id="app"]/div/div[2]/div[2]/div[1]/span/a[1]/i[1]').click()

foriinrange(0,2):

get_page()

time.sleep(3)

data=pd.DataFrame({'排名':rank,'歌名':name,'歌手':singer})

data.to_csv("./qq_song.csv")復(fù)習(xí)題一、單項(xiàng)選擇題1、下面有關(guān)Scrapy庫說法不正確的是(A)A、Scrapy不支持XPath選擇器B、可以使用pipinstallscrapy來安裝Scrapy框架。C、可以使用scrapystartprojectxxx來創(chuàng)建scrapy爬蟲項(xiàng)目。D、可以使用scrapyversion命令查看scrapy的版本信息。(A)2、有關(guān)Scrapy框架不正確的是(D)A、scrapygenspiderxxx表示使用模板創(chuàng)建爬蟲項(xiàng)目B、可以使用scrapycrawlxxx來啟動爬蟲項(xiàng)目C、Pycharm中可以直接運(yùn)行Scrapy爬蟲項(xiàng)目。D、scrapy框架中不能使用bs4模塊解析網(wǎng)頁數(shù)據(jù)二、判斷題1、Windows下只有確保安裝了wheel、lxml、PyOpenss1、Twisted、Pywin32成功安裝后,才能安裝Scrapy。(對)2、imagespipeline是Scrapy框架中一種特殊的pipeline(管道),作用于圖片的下載。(對)3、Scrapy的配置文件settings.py,將命令“ROBOTSTXT_OBEY=True”表示不必遵守爬蟲協(xié)議。(錯)4、pipelines.py文件主要執(zhí)行保存數(shù)據(jù)的操作,數(shù)據(jù)對象來源于items.py。(對)5、Scrapy框架可以爬取Javascript等動態(tài)網(wǎng)站網(wǎng)頁。(錯)三、編程題1.請使用Scrapy爬蟲或selenium對對中國站長站素材欄目(/tupian/)的圖片進(jìn)行分頁式爬取。參考代碼:fromseleniumimportwebdriverfrommon.byimportByfromselenium.webdriver.support.uiimportWebDriverWaitimporttimeimporturllib.requestimportosbrowser=webdriver.Chrome()wait=WebDriverWait(browser,20)browser.get('/tupian/')pic_name=[]pic_url=[]defdownload_image(image_src):dirpath='downloadpic'#創(chuàng)建一個文件夾print(os.path.exists(dirpath))ifnotos.path.exists(dirpath):os.mkdir(dirpath)image_src="https:"+image_src#創(chuàng)建文件名filename=os.path.basename(image_src)#圖片路徑filepath=os.path.join(dirpath,filename)#發(fā)送請求,保存圖片headers={'User-Agent':'Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/74.0.3729.131Safari/537.36',}request=urllib.request.Request(url=image_src,headers=headers)response=urllib.request.urlopen(request)withopen(filepath,'wb')asfp:fp.write(response.read())defparse_content():forninrange(1,41):pic_name.append(browser.find_element(By.XPATH,"http://*/div[@class='itemmasonry-brick'][{}]/div[@class='bot-div']/a[@class='name']".format(n)).text)pic_url.append(browser.find_element(By.XPATH,"http://div[@class='itemmasonry-brick'][{}]/img[@class='lazy']".format(n)).get_attribute('data-original'))forimage_srcinpic_url:download_image(image_src)time.sleep(2)#//d

溫馨提示

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

最新文檔

評論

0/150

提交評論