一篇文章教會你利用Python網路爬蟲實現豆瓣電影採集
【一、專案背景】
豆瓣電影提供最新的電影介紹及評論包括上映影片的影訊查詢及購票服務。可以記錄想看、在看和看過的電影電視劇 、順便打分、寫影評。極大地方便了人們的生活。
今天以電視劇(美劇)為例,批次爬取對應的電影,寫入csv文件 。使用者可以透過評分,更好的選擇自己想要的電影。
【二、專案目標】
獲取對應的電影名稱,評分,詳情連結,下載 電影的圖片,儲存文件。
【三、涉及的庫和網站】
1、網址如下:
%E7%BE%8E%E5%89%A7&sort=recommend&page_limit=20&page_start={}
2、涉及的庫:requests**、fake_useragent、json****、csv**
3、軟體:PyCharm
【四、專案分析】
1、如何多網頁請求?
點選下一頁時,每增加一頁paged自增加20,用{}代替變換的變數,再用for迴圈遍歷這網址,實現多個網址請求。
2、如何獲取真正請求的地址?
請求資料時,發現頁面上並沒有對應資料。其實豆瓣網採用javascript動態載入內容,防止採集。
1)F12右鍵檢查,找到Network,左邊選單Name , 找到第五個資料,點選Preview。
2)點開subjects,可以看到 title 就是對應電影名稱。rate就是對應評分。透過js解析subjects字典,找到需要的欄位。
- 如何網頁訪問?
%E7%BE%8E%E5%89%A7&sort=recommend&page_limit=20&page_start=0
%E7%BE%8E%E5%89%A7&sort=recommend&page_limit=20&page_start=20
%E7%BE%8E%E5%89%A7&sort=recommend&page_limit=20&page_start=40
%E7%BE%8E%E5%89%A7&sort=recommend&page_limit=20&page_start=60
當點選下一頁時,每增加一頁page自增加20,用{}代替變換的變數,再用for迴圈遍歷這網址,實現多個網址請求。
【五、專案實施】
1、我們定義一個class類繼承object,然後定義init方法繼承self,再定義一個主函式main繼承self。匯入需要的庫和請求網址。
import requests,json
from fake_useragent import UserAgent
import csv
class Doban(object):
def __init__(self):
self.url = "%E7%BE%8E%E5%89%A7&sort=recommend&page_limit=20&page_start={}"
def main(self):
pass
if __name__ == '__main__':
Siper = Doban()
Siper.main()
2、隨機產生UserAgent,構造請求頭,防止反爬。
for i in range(1, 50):
self.headers = {
'User-Agent': ua.random,
}
3、傳送請求 ,獲取響應,頁面回撥,方便下次請求。
def get_page(self, url):
res = requests.get(url=url, headers=self.headers)
html = res.content.decode("utf-8")
return html
4、json解析頁面資料,獲取對應的字典。
data = json.loads(html)['subjects']
# print(data[0])
5、for遍歷,獲取對應的電影名、 評分、下詳情頁連結。
print(name, goblin_herf)
html2 = self.get_page(goblin_herf) # 第二個發生請求
parse_html2 = etree.HTML(html2)
r = parse_html2.xpath('//div[@class="entry"]/p/text()')
6、建立csv檔案進行寫入,定義對應的標題頭內容,儲存資料 。
# 建立csv檔案進行寫入
csv_file = open('scr.csv', 'a', encoding='gbk')
csv_writer = csv.writer(csv_file)
# 寫入csv標題頭內容
csv_writerr.writerow(['電影', '評分', "詳情頁"])
#寫入資料
csv_writer.writerow([id, rate, urll])
7、圖片地址進行請求。定義圖片名稱,儲存文件。
html2 = requests.get(url=urll, headers=self.headers).content
dirname = "./圖/" + id + ".jpg"
with open(dirname, 'wb') as f:
f.write(html2)
print("%s 【下載成功!!!!】" % id)
8、呼叫方法,實現功能。
html = self.get_page(url)
self.parse_page(html)
9、專案最佳化:
1)設定時間延時。
time.sleep(1.4)
2)定義一個變數u, for遍歷,表示爬取的是第幾頁。(更清晰可觀)。
u = 0
self.u += 1;
【六、效果展示】
1、點選綠色小三角執行輸入起始頁,終止頁( 從0頁開始 )。
2、將下載成功資訊顯示在控制檯。
3、儲存csv文件。
4、電影圖片展示。
【七、總結】
1、不建議抓取太多資料,容易對伺服器造成負載,淺嘗輒止即可。
2、本文章就Python爬取豆瓣網,在應用中出現的難點和重點,以及如何防止反爬,做出了相對於的解決方案。
3、希望透過這個專案,能夠幫助瞭解json解析頁面的基本流程,字串是如何拼接,format函式如何運用。
4、本文基於Python網路爬蟲,利用爬蟲庫,實現豆瓣電影及其圖片的獲取。實現的時候,總會有各種各樣的問題,切勿眼高手低,勤動手,才可以理解的更加深刻。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3486/viewspace-2826144/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 一篇文章教會你使用Python網路爬蟲下載酷狗音樂Python爬蟲
- Python爬蟲筆記(4):利用scrapy爬取豆瓣電影250Python爬蟲筆記
- 一篇文章教會你利用Python網路爬蟲獲取有道翻譯手機版的翻譯介面Python爬蟲
- Python網路資料採集(爬蟲)Python爬蟲
- Python 爬蟲實戰(1):分析豆瓣中最新電影的影評Python爬蟲
- 【python爬蟲案例】利用python爬取豆瓣電影TOP250評分排行資料!Python爬蟲
- Python爬蟲教程-17-ajax爬取例項(豆瓣電影)Python爬蟲
- python爬蟲 爬取豆瓣電影 1-10 ajax 資料Python爬蟲
- 爬蟲01:爬取豆瓣電影TOP 250基本資訊爬蟲
- Python爬蟲初學二(網路資料採集)Python爬蟲
- 手把手教你網路爬蟲(爬取豆瓣電影top250,附帶原始碼)爬蟲原始碼
- Python網路爬蟲資料採集實戰:Requests和Re庫Python爬蟲
- 【Python】從0開始寫爬蟲——轉身扒豆瓣電影Python爬蟲
- 什麼是Python爬蟲?一篇文章帶你全面瞭解爬蟲Python爬蟲
- Python網路爬蟲實踐案例:爬取貓眼電影Top100Python爬蟲
- [python爬蟲] BeautifulSoup和Selenium對比爬取豆瓣Top250電影資訊Python爬蟲
- python實現selenium網路爬蟲Python爬蟲
- Python簡單兩步實現天氣爬蟲採集器Python爬蟲
- 使用python爬取豆瓣電影TOP250Python
- Python爬取分析豆瓣電影Top250Python
- 一篇文章帶你瞭解網路爬蟲的概念及其工作原理爬蟲
- python網路爬蟲應用_python網路爬蟲應用實戰Python爬蟲
- python爬蟲---網頁爬蟲,圖片爬蟲,文章爬蟲,Python爬蟲爬取新聞網站新聞Python爬蟲網頁網站
- Python網路爬蟲實戰Python爬蟲
- python更換代理爬取豆瓣電影資料Python
- scrapy爬取豆瓣電影資料
- Python網路爬蟲(正則, 內涵段子,貓眼電影, 鏈家爬取)Python爬蟲
- 【Python爬蟲9】Python網路爬蟲例項實戰Python爬蟲
- Python 爬蟲進階篇-利用beautifulsoup庫爬取網頁文章內容實戰演示Python爬蟲網頁
- Python爬蟲入門 | 7 分類爬取豆瓣電影,解決動態載入問題Python爬蟲
- 利用爬蟲採集音訊資訊完整程式碼示例爬蟲音訊
- 豆瓣電影TOP250爬蟲及視覺化分析筆記爬蟲視覺化筆記
- 【Python3網路爬蟲開發實戰】3.4-抓取貓眼電影排行Python爬蟲
- 06、豆瓣爬蟲爬蟲
- 爬蟲豆瓣美女爬蟲
- 用python實現的抓取騰訊視訊所有電影的爬蟲Python爬蟲
- React實現的超高仿豆瓣電影React
- 怎麼利用Python網路爬蟲來提取資訊Python爬蟲