爬蟲入門學習筆記3

huamanggg發表於2021-01-05

爬蟲入門學習筆記3

get()和post()的資料請求

  • 在get()裡面叫paramas
  • 在post()裡面叫data

嘗試動態頁面的爬取(豆瓣排名)

老規矩,先附上原始碼:

import requests
import json
url='https://movie.douban.com/j/chart/top_list?'
header={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"}
params = {
    'type':'5',
    'interval_id':'100:90',
    'action':'',
    'start': '0',
    'limit':'20'
}
response=requests.get(url=url,headers=header,params=params).content.decode()
res=json.loads(response)
for i in res:
    rating = i['rating'][0]
    rank = i['rank']
    types = i['types']
    typess = ''
    for a in types:
        typess += a
        typess += '/'
    regions = i['regions'][0]
    date = i['release_date']
    title = i['title']
    actors = i['actors']
    actorss = ''
    for b in actors:
        actorss += b
        actorss += '/'
    print('電影名字:' + title)
    print('排名:',rank)
    print('評分:' + rating)
    print('主演:' + actorss)
    print('上映時間:' + date + '/上映地區:' + regions + '/分類:' + typess)
    print('-------------------------------------------------------------------')

失敗的嘗試

一開始使用xpath來爬取這個文字,但是發現不得行,爬了一個寂寞給我,後來瞭解到這是一個動態的頁面,所以我們回憶起爬取有道翻譯怎麼操作的

必要資訊的提取

  • 開啟network勾到XHR,看響應頭,發現第三個是有效的資訊
    在這裡插入圖片描述
  • 目標確定,接下來就是獲取必要的資訊來配置爬蟲
  • 找出真正的url
  • 發現提交方式是get
  • 發現返回的是json格式
    在這裡插入圖片描述
  • 翻到最下面,找到get請求的資料paramas
    在這裡插入圖片描述

配置好爬蟲

  • 之前爬取有道翻譯的時候也涉及了json解密。
  • response=requests.get(url=url,headers=header,params=params).content.decode()對於這後面的.content.decode()這裡說一下我的理解:由於返回的是json格式,不能用文字方式爬取,所以用最最基本的二進位制方式爬取就對了,decode()指的是編碼方式,預設就是字串方式,剛好我們json.loads()就是要處理字串
import requests
import json
url='https://movie.douban.com/j/chart/top_list?'
header={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"}
params = {
    'type':'5',
    'interval_id':'100:90',
    'action':'',
    'start': '0',
    'limit':'20'
}
response=requests.get(url=url,headers=header,params=params).content.decode()
res=json.loads(response)

資料的處理

  • 解碼出來的res是一個列表,列表裡面是一個個的字典,每個字典代表一個電影
    在這裡插入圖片描述
    在這裡插入圖片描述
  • 由於不美觀,所我處理了一個電影好觀察字典的鍵和值的對應關係
    在這裡插入圖片描述
    這樣就一目瞭然了
    照著這個處理後的字典,資料處理很簡單,就不多說了
for i in res:
    rating = i['rating'][0]
    rank = i['rank']
    types = i['types']
    typess = ''
    for a in types:
        typess += a
        typess += '/'
    regions = i['regions'][0]
    date = i['release_date']
    title = i['title']
    actors = i['actors']
    actorss = ''
    for b in actors:
        actorss += b
        actorss += '/'
    print('電影名字:' + title)
    print('排名:',rank)
    print('評分:' + rating)
    print('主演:' + actorss)
    print('上映時間:' + date + '/上映地區:' + regions + '/分類:' + typess)
    print('-------------------------------------------------------------------')

相關文章