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


  一、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))

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM