爬虫项目之豆瓣电影排行榜前10页
目錄
一、學(xué)習(xí)資源:
二、知識(shí)點(diǎn)介紹
1、urlib庫(kù)的基本使用??
2、使用實(shí)例
? ? ? ? ①獲取網(wǎng)頁(yè)源碼
? ? ? ? ?②從服務(wù)器下載網(wǎng)頁(yè)、圖片、視頻
3、UA介紹
? ? ? ? ①簡(jiǎn)介
????????②實(shí)例
?三、項(xiàng)目詳細(xì)講解
? 1、分析
?2、步驟
? ? ? ? (1)請(qǐng)求對(duì)象定制
? ? ? ? (2)獲取響應(yīng)數(shù)據(jù)
? ? ? ? (3)下載數(shù)據(jù)
?3、整體思路
四、項(xiàng)目源碼
一、學(xué)習(xí)資源:
尚硅谷Python爬蟲(chóng)教程小白零基礎(chǔ)速通(含python基礎(chǔ)+爬蟲(chóng)案例)_嗶哩嗶哩_bilibili大家記得一鍵三連【點(diǎn)贊、投幣、收藏】感謝支持~本教程適合想掌握爬蟲(chóng)技術(shù)的學(xué)習(xí)者,以企業(yè)主流版本Python 3.7來(lái)講解,內(nèi)容包括:Python基礎(chǔ)、Urllib、解析(xpath、jsonpath、beautiful)、requests、selenium、Scrapy框架等。針對(duì)零基礎(chǔ)的同學(xué)可以從頭學(xué)起,有Python基礎(chǔ)的同學(xué)建議直接從第52集開(kāi)始學(xué)習(xí)爬蟲(chóng)部分視頻。教程中示例多種網(wǎng)站的爬取,https://www.bilibili.com/video/BV1Db4y1m7Ho?p=86
????????這位老師講的很有激情,并知識(shí)點(diǎn)和邏輯清晰,強(qiáng)烈推薦
二、知識(shí)點(diǎn)介紹
? ? ? ? 1、urlib庫(kù)的基本使用?
2、使用實(shí)例
? ? ? ? ①獲取網(wǎng)頁(yè)源碼
? ? ? ???
? ? ? ? ?②從服務(wù)器下載網(wǎng)頁(yè)、圖片、視頻
3、UA介紹
? ? ? ? ①簡(jiǎn)介
?????????之所以用UA是因?yàn)橐恍┚W(wǎng)站為了防止用爬蟲(chóng)去爬取網(wǎng)頁(yè)信息所設(shè)置的一個(gè)檢查機(jī)制,服務(wù)器要識(shí)別客戶(hù)的操作系統(tǒng)及版本等數(shù)據(jù),但是用正常的爬蟲(chóng)去爬取就不包含這些信息,所以要進(jìn)行對(duì)象定制,讓服務(wù)器以為我們是真的從瀏覽器中訪(fǎng)問(wèn)的。
????????②實(shí)例
?三、項(xiàng)目詳細(xì)講解
? 1、分析
? ? ? ? ①首先要獲取url,但是因?yàn)橐@取前十頁(yè)的數(shù)據(jù),url是一個(gè)變量,通過(guò)對(duì)網(wǎng)頁(yè)的檢查可以發(fā)現(xiàn)網(wǎng)頁(yè)的url有規(guī)律,其起始頁(yè)為(page-1)*20,其每頁(yè)20個(gè)數(shù)據(jù)。
????????????????????????????????????????????????????????????????????????????????????
? ? ? ? ②然后將data解析為unicode編碼的數(shù)據(jù),然后再和起始鏈接組合成為新的鏈接? ? ? ??
?2、步驟
? ? ? ? (1)請(qǐng)求對(duì)象定制
? ? ? ? ? ? ? ?解決了url的問(wèn)題之后,請(qǐng)求對(duì)象的定制就變得簡(jiǎn)單了,就是把之前的內(nèi)容進(jìn)行了封裝
? ? ? ? (2)獲取響應(yīng)數(shù)據(jù)
? ? ? ? ? ? ? ? 相應(yīng)的獲取響應(yīng)數(shù)據(jù)也是把之前的代碼進(jìn)行封裝
? ? ? ? (3)下載數(shù)據(jù)
? ? ? ? ? ? ? ? 將獲取到的網(wǎng)頁(yè)數(shù)據(jù)寫(xiě)入文件即可?
?
????????????????文件內(nèi)容:?
?3、整體思路
? ? ? ? ?①通過(guò)一個(gè)主程序入口進(jìn)入,也就是main函數(shù)
? ? ? ? ②輸入起始頁(yè)碼和結(jié)束頁(yè)碼
? ? ? ? ③通過(guò)循環(huán)遍歷的方式去獲取數(shù)據(jù),此處采用for循環(huán),range函數(shù)是左閉右開(kāi)的,所以結(jié)束的位置要加1才能到達(dá)效果
? ? ? ? ④請(qǐng)求對(duì)象定制,用函數(shù)實(shí)現(xiàn)其功能(create_request),定義函數(shù)時(shí)不知道其返回值和傳遞值,可以不寫(xiě),然后再根據(jù)需要去添加。定義函數(shù)時(shí)發(fā)現(xiàn)需要所處頁(yè)面的值,則傳入加上page。
? ? ? ? ⑤獲取相應(yīng)數(shù)據(jù),用函數(shù)實(shí)現(xiàn)其功能(get_content),同樣的,定義函數(shù)時(shí)不知道其返回值和傳遞值則先不寫(xiě),然后再根據(jù)需要去添加。定義函數(shù)是發(fā)現(xiàn)需要上一個(gè)的對(duì)象,則create_request需要返回一個(gè)對(duì)象(request),把create_request()函數(shù)完善
? ? ? ? ?⑥下載數(shù)據(jù),存儲(chǔ)到文件中,用函數(shù)實(shí)現(xiàn)其功能(down_load),同樣的,定義函數(shù)時(shí)不知道其返回值和傳遞值則先不寫(xiě),然后再根據(jù)需要去添加。定義函數(shù)時(shí)發(fā)現(xiàn)需要網(wǎng)頁(yè)數(shù)據(jù),則get_content需要返回內(nèi)容,完善get_content函數(shù)()。
四、項(xiàng)目源碼
# coding=utf-8 import urllib.request #https://movie.douban.com/j/chart/top_list?type=5&interval_id=100%3A90&action=&start=0&limit=20#https://movie.douban.com/j/chart/top_list?type=5&interval_id=100%3A90&action=&start=20&limit=20#https://movie.douban.com/j/chart/top_list?type=5&interval_id=100%3A90&action=&start=40&limit=20#page 1 2 3 4 #start 0 20 40 60#start=(page-1)*20#下載豆瓣電影前十頁(yè)的數(shù)據(jù)#(1)請(qǐng)求對(duì)象的定制 #(2)獲取響應(yīng)的數(shù)據(jù) #(3)下載數(shù)據(jù)import urllib.parse import urllib.request #(1)請(qǐng)求對(duì)象的定制 def create_request(page):base_url='https://movie.douban.com/j/chart/top_list?type=5&interval_id=100%3A90&action=&'data={'start' :(page-1)*20,'limit':20}data = urllib.parse.urlencode(data)#解析data將data變?yōu)閡nicode編碼url = base_url + dataheaders = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"}request = urllib.request.Request(url=url,headers=headers)return request #(2)獲取響應(yīng)的數(shù)據(jù) def get_content(request):response = urllib.request.urlopen(request)content = response.read().decode('utf-8')return content #(3)下載數(shù)據(jù) def down_load(page,content):with open('douban_' + str(page) +'.json','w',encoding='utf-8') as fp:fp.write(content) #程序入口 if __name__ == '__main__':start_page = int(input('請(qǐng)輸入起始頁(yè)碼'))end_page = int(input('請(qǐng)輸入結(jié)束的頁(yè)面'))for page in range(start_page,end_page+1) :#左閉右開(kāi)#每一頁(yè)都有自己的請(qǐng)求對(duì)象的定制request = create_request(page)#獲取響應(yīng)的數(shù)據(jù)content = get_content(request)#下載down_load(page,content)???????
總結(jié)
以上是生活随笔為你收集整理的爬虫项目之豆瓣电影排行榜前10页的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 程序的加载和执行(三)——《x86汇编语
- 下一篇: 程序的加载和执行(四)——《x86汇编语