1. 程式人生 > >HTTP協議與使用Python獲取數據並寫入MySQL

HTTP協議與使用Python獲取數據並寫入MySQL

執行 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