日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

xhr get获取文件流下载文件_python爬虫实战——豆瓣电影get初体验

發(fā)布時間:2023/12/4 python 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 xhr get获取文件流下载文件_python爬虫实战——豆瓣电影get初体验 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

影評許可證

公眾號[2019]第22期

本欄目由“數(shù)據(jù)皮皮俠”獨家呈獻(xiàn)

專場

python爬蟲實戰(zhàn)——豆瓣電影get初體驗

2019.10.28 / 早上7點場 / 免費

本期“欄目”的四大看點:

1?如何爬取2 如何解析與提取3?如何解析json數(shù)據(jù)4 實戰(zhàn):爬取豆瓣影視信息

1 如何爬取

how to Obtain

我們老說爬蟲,那么具體到底怎么爬?爬什么?

首先,“爬蟲四步”:獲取數(shù)據(jù)(包含請求和響應(yīng)兩個動作)、解析數(shù)據(jù)、提取數(shù)據(jù)、存儲數(shù)據(jù)。

最簡單的請求方式是:requests.get()

代碼:

import?requestsurl?=?''response = requests.get(url)

此外,我們還需要一個工具,叫做Network。在它的幫助下,我們能看到所有的請求,這樣我們才能完成爬蟲四步

Network能夠記錄瀏覽器的所有請求。我們最常用的是:ALL(查看全部)/XHR(僅查看XHR)/Doc(Document,第0個請求一般在這里),有時候也會看看:Img(僅查看圖片)/Media(僅查看媒體文件)/Other(其他)。最后,JS和CSS,則是前端代碼,負(fù)責(zé)發(fā)起請求和頁面實現(xiàn);Font是文字的字體。

在爬蟲里, XHR和Doc是我們最常用的。我們能在Doc里找到一個網(wǎng)頁的源代碼,而在網(wǎng)頁源代碼里找不到的信息,通常都能在XHR里找到。有它的存在,人們不必刷新/跳轉(zhuǎn)網(wǎng)頁,即可加載新的內(nèi)容。

2?解析與提取

Parsing and Reading

當(dāng)數(shù)據(jù)藏匿于網(wǎng)頁源代碼,在“爬蟲四步”鏈里,最重要的庫叫BeautifulSoup,它能提供一套完整的數(shù)據(jù)解析、數(shù)據(jù)提取解決方案。(關(guān)于BeautifulSoup的安裝和使用,在前期文章中介紹過哦~)

XHR所傳輸?shù)臄?shù)據(jù),最重要的一種是用json格式寫成的,和html一樣,這種數(shù)據(jù)能夠有組織地存儲大量內(nèi)容。json的數(shù)據(jù)類型是“文本”,我們稱為字符串。我們能很容易將json格式的數(shù)據(jù)轉(zhuǎn)化為列表/字典,反之也可以。

3 如何解析json數(shù)據(jù)

How to Parse JSON Data

通過Response類支持使用json()方法來將數(shù)據(jù)轉(zhuǎn)為list/dic,比如:

import requestsr=requests.get(‘http://……’)print(r.json())

請求本身很有意思。requests.get()里面其實只有一個參數(shù),即url。但其實,這個請求可以有多個參數(shù)。

params,可以讓我們帶著參數(shù)來請求數(shù)據(jù):我想要第幾頁?我想要搜索的關(guān)鍵詞?我想要多少個數(shù)據(jù)?

headers,請求頭。它告訴服務(wù)器,我的設(shè)備/瀏覽器是什么?我從哪個頁面而來?

再往后,除了get請求之外,還存在著另一種請求方式——post。post區(qū)別于get的是:get是明文顯示參數(shù),post是非明文顯示參數(shù)。學(xué)會post,又有兩個參數(shù)可用

(1)在post請求里,我們使用data來傳遞參數(shù),其用法和params非常相像。

(2)cookies,中文名是“小餅干”。但它卻和“小餅干”并無關(guān)聯(lián)。它的作用是讓服務(wù)器“記住你”,比如一般當(dāng)你登錄一個網(wǎng)站,你都會在登錄頁面看到一個可勾選的選項“記住我”。如果你點了勾選,服務(wù)器就會生成一個cookies和你的賬號綁定。接著,它把這個cookies告訴你的瀏覽器,讓瀏覽器把cookies存儲到你的本地電腦。當(dāng)下一次,瀏覽器帶著cookies訪問博客,服務(wù)器會知道你是何人,你不需要再重復(fù)輸入賬號密碼,就能直接訪問。

到這,考慮極端情況。代碼可能會是這樣:

import?requestsurl_1 = 'https://…'headers = {'user-agent':''}data = {}#?定義url,headers和datalogin_in = requests.post(url,headers=headers,data=data)cookies = login_in.cookies#?完成登錄,獲取cookiesurl_2 = 'https://…'params = {}# 定義url和paramsresponse=requests.get(url,headers=headers,params=params,cookies=cookies)# 帶著cookies重新發(fā)起請求

4 如何爬取豆瓣電影數(shù)據(jù)?

Get Douban Movie Data

4.1

創(chuàng)建爬蟲文件,獲取url地址

地址為:url="https://movie.douban.com/top250"

4.2

使用request獲取第一頁的請求信息:

import requestsfrom bs4 import BeautifulSoupurl="https://movie.douban.com/top250"wb_data=requests.get(url)# 獲取網(wǎng)頁文本信息soup=BeautifulSoup(wb_data.text,'lxml')# 從soup中提取我們想要的信息titles=soup.select('div.hd>a')rates=soup.select('span.rating_num')imgs=soup.select('img[]')for title,rate,img in zip(titles,rates,imgs): data={ 'title':list(title.stripped_strings), 'rate':rate.get_text(), 'img':img.get('src') }????print (data)

4.3

獲取多頁的請求信息

import requestsfrom bs4 import BeautifulSoupurls=['https://movie.douban.com/top250?start=n&filter=' for n in range(0,250,25)]for url in urls: wb_data=requests.get(url) # 獲取網(wǎng)頁文本信息 soup=BeautifulSoup(wb_data.text,'lxml') # 從soup中提取我們想要的信息 titles=soup.select('div.hd>a') rates=soup.select('span.rating_num') imgs=soup.select('img[]') for title,rate,img in zip(titles,rates,imgs): data={ 'title':list(title.stripped_strings), 'rate':rate.get_text(), 'img':img.get('src') } print(data)

4.4

下載電影圖片地址到本地

import requestsfrom bs4 import BeautifulSoupi=0urls=['https://movie.douban.com/top250?start=n&filter=' for n in range(0,250,25)]for url in urls: wb_data=requests.get(url) # 獲取網(wǎng)頁文本信息 soup=BeautifulSoup(wb_data.text,'lxml') # 從soup中提取我們想要的信息 titles=soup.select('div.hd>a') rates=soup.select('span.rating_num') imgs=soup.select('img[]') for title,rate,img in zip(titles,rates,imgs): data={ 'title':list(title.stripped_strings), 'rate':rate.get_text(), 'img':img.get('src') } # 保存圖片到本地 i+=1 fileName=str(i)+'、'+data['title'][0]+''+data['rate']+'分.jpg' pic=requests.get(data['img']) with open('E:/Envs/douban/douban_imgs/'+fileName,'wb')as photo: photo.write(pic.content) print(data)

4.5

爬取豆瓣熱門美劇存儲到mongodb中

將json數(shù)據(jù)轉(zhuǎn)換為字典,然后根據(jù)鍵subjects循環(huán)取出里面的值,取出我們想要的數(shù)據(jù)

import requests,jsonurl='https://movie.douban.com/j/search_subjects?type=tv&tag=%E7%BE%8E%E5%89%A7&sort=recommend&page_limit=20&page_start=0'response_data=requests.get(url)# 將json數(shù)據(jù)轉(zhuǎn)換為字典類型并根據(jù)鍵名循環(huán)取出值json_data=json.loads(response_data.text)# 查看鍵名# print(json_data)for tv in json_data['subjects']: # print(tv) # 取出我們需要的數(shù)據(jù) data={ 'rate':tv['rate'], 'title':tv['title'], 'img_url':tv['cover'], 'id':tv['id'], # 自定義一個標(biāo)志 'tag':"美劇" } print(data)

獲取多頁數(shù)據(jù)

import?requests,json# url='https://movie.douban.com/j/search_subjects?type=tv&tag=%E7%BE%8E%E5%89%A7&sort=recommend&page_limit=20&page_start=0'# 這里的200可以修改為更高數(shù)字,目前只爬取200條數(shù)據(jù)urls=['https://movie.douban.com/j/search_subjects?type=tv&tag=%E7%BE%8E%E5%89%A7&sort=recommend&page_limit=20&page_start='+str(n) for n in range(0,200,20)]for?url?in?urls:????response_data=requests.get(url)????#?將json數(shù)據(jù)轉(zhuǎn)換為字典類型并根據(jù)鍵名循環(huán)取出值????json_data=json.loads(response_data.text)????#?查看鍵名????#?print(json_data)????for?tv?in?json_data['subjects']:????????#?print(tv)????????#?取出我們需要的數(shù)據(jù)????????data={????????????'rate':tv['rate'],????????????'title':tv['title'],????????????'img_url':tv['cover'],????????????'id':tv['id'],????????????#?自定義一個標(biāo)志????????????'tag':"美劇"????????}????????print(data)

?保存數(shù)據(jù)到mongodb數(shù)據(jù)庫里面

import?requests,json,pymongo#?url='https://movie.douban.com/j/search_subjects?type=tv&tag=%E7%BE%8E%E5%89%A7&sort=recommend&page_limit=20&page_start=0'# 這里的200可以修改為更高數(shù)字,目前只爬取200條數(shù)據(jù)client=pymongo.MongoClient(host='localhost',port=27017)db=client.db_bkcollection = db.doubanurls=['https://movie.douban.com/j/search_subjects?type=tv&tag=%E7%BE%8E%E5%89%A7&sort=recommend&page_limit=20&page_start='+str(n) for n in range(0,200,20)]for?url?in?urls:????response_data=requests.get(url)????#?將json數(shù)據(jù)轉(zhuǎn)換為字典類型并根據(jù)鍵名循環(huán)取出值????json_data=json.loads(response_data.text)????#?查看鍵名????#?print(json_data)????for?tv?in?json_data['subjects']:????????#?print(tv)????????#?取出我們需要的數(shù)據(jù)????????data={????????????'rate':tv['rate'],????????????'title':tv['title'],????????????'img_url':tv['cover'],????????????'id':tv['id'],????????????#?自定義一個標(biāo)志????????????'tag':"美劇"????????}????????collection.insert_one(data) print(data)

END

本期“ 總導(dǎo)演 ”:李雨萱

本期“ 剪輯師 ”:李嘉楠

本期“欄目”進入尾聲了,我們下期再見!

如果你有任何問題歡迎在“欄目下方”留言

關(guān)注公眾號還可獲取更多python的相關(guān)內(nèi)容

總結(jié)

以上是生活随笔為你收集整理的xhr get获取文件流下载文件_python爬虫实战——豆瓣电影get初体验的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。