HTTP協議與使用Python獲取數據並寫入MySQL
阿新 • • 發佈:2018-08-10
執行 tag explore 進制 錯誤 cts item 定義 ons
一、Http協議
二、Https協議
三、使用Python獲取數據
(1)urlib
(2)GET請求
(3)POST請求
四、爬取豆瓣電影實戰
1.思路
(1)在瀏覽器中輸入https://movie.douban.com/j/search_tags?type=movie會得到顯示的電影的分類標簽,下面以“熱門”為例
{"tags":["熱門","最新","經典","可播放","豆瓣高分","冷門佳片","華語","歐美","韓國","日本","動作","喜劇","愛情","科幻","懸疑","恐怖","成長"]}
(2)在瀏覽器中輸入https://movie.douban.com/進入豆瓣首頁,然後下拉到“最近熱門電影”,然後點擊“更多”,瀏覽器中顯示的url為https://movie.douban.com/explore#!type=movie&tag=熱門&sort=recommend&page_limit=20&page_start=0,即表示熱門電影的第一頁中的20部影片。
(3)下拉至底部,點擊“顯示更多”一下,則此時的url變為https://movie.douban.com/explore#!type=movie&tag=熱門&sort=recommend&page_limit=20&page_start=20,也就表示第二頁中的20部影片。
(4)在瀏覽器中輸入下面的url會得到20個json格式的字符串:https://movie.douban.com/j/search_subjects?type=movie&tag=熱門&sort=recommend&page_limit=20&page_start=0。
(5)針對每個url,如果返回的結果中存在數據,那麽就將page_start增加20繼續執行GET請求,直到不再返回數據為止。
2.代碼實現
import urllib.request from urllib import parse import json # 獲得全部電影標簽 url = ‘https://movie.douban.com/j/search_tags?type=movie‘ # 需要將中文漢字轉化成十六進制的形式,否則會報編碼錯誤 print(parse.quote(‘熱門‘)) request = urllib.request.Request(url=url) response = urllib.request.urlopen(request, timeout=20) # 獲得json形式的字符串 result = response.read() print(result) # 將json形式的字符串解析成字典 result = json.loads(result) print(result) # 將取字典的標簽字段存儲到列表中 tags = result[‘tags‘] print(tags) # 定義一個列表存儲電影的基本信息 movies = [] # 分別處理每個tag for tag in tags: print(tag) tag = parse.quote(tag) print(tag) start = 0 # 不斷請求,直到返回結果為空 while True: # 拼接需要請求的url url = ‘https://movie.douban.com/j/search_subjects?‘ ‘type=movie&tag=‘ + tag + ‘&sort=recommend&page_limit=20&page_start=‘ + str(start) print(url) request = urllib.request.Request(url=url) response = urllib.request.urlopen(request, timeout=20) # 獲得json形式的字符串 result = response.read() print(result) # 將json形式的字符串解析成字典 result = json.loads(result) print(result) # 將取字典的標簽字段存儲到列表中 result = result[‘subjects‘] print(result) # 循環跳出條件 if len(result) ==0: break # 將每一條記錄都添加到movies列表中 for item in result: movies.append(item) # 修改起始位置,相當於點擊"顯示更多" start += 20 print(len(movies))
HTTP協議與使用Python獲取數據並寫入MySQL