Python爬蟲之爬取豆瓣電影(一)

2021-08-19 10:27:44 字數 2839 閱讀 4297

最近閒來無事 學習python爬蟲,爬取豆瓣電影

開啟豆瓣電影 按f12 ,重新整理豆瓣網頁,會發現network的xhr中有鏈結

貼上出鏈結

會出現如下json:

說明這個是每個分類電影的標籤,是乙個get請求的api,如果在python中載入成字典,則包含以惡個tags,對應的值是乙個列表,裡面的每一項都是乙個電影標籤。

我們還順便發現另乙個get請求的api:

可以根據提供的標籤,排序方法,每一頁數量,每頁開始編號等引數返回相應的電影資料,在瀏覽器訪問此鏈結返回的也是乙個json格式字串,同樣轉換python字典在處理,如果單擊記載更多按鈕,會發現這個網頁繼續請求這個api,不同的是page_start不斷增加,通過改變開始編號即可請求新的資料。所以思路是得到每乙個標籤,迴圈遍歷每乙個標籤下面的電影。

# 獲取所有標籤

url = ''

request = urllib2.request(url=url)

response = urllib2.urlopen(request,timeout=20)

result = response.read()

# 載入json為字典

result = json.loads(result)

tags = result['tags']

# 定義乙個列表儲存電影的基本資訊

movies =

# 處理每乙個tag

for tag in tags:

start = 0

# 不斷請求每一頁,直到返回結果為空 空 說明遍歷的此tag下的電影已經沒了

while true:

# 此時遍歷每乙個標籤每個標籤的請求引數需要拼接, 包括標籤和開始編號

url = ''+tag+'&sort=recommend&page_limit=20&page_start='+str(start)

print url

request = urllib2.request(url=url)

response = urllib2.urlopen(request,timeout=20)

result =response.read()

result = json.loads(result)

# 先在瀏覽器中請求上面的api,觀察json的結構

# 然後在python中取出自己想要的資料

result = result['subjects']

# 返回結果為空的話,說明已經沒有資料了

# 完成乙個標籤的處理退出迴圈

iflen(result) ==0:

break

# 將每一條資料加入movies中

foritem

inresult:

# 使用的迴圈條件得修改條件

#這裡需要修改start

start += 20

# 看看一共獲得了多少電影

print len(movies)

1、遇到問題,執行此**

報錯:unicodeencodeerror: 『ascii』 codec can』t encode characters in position 38-39: ordinal not in range(128)

即在**檔案開始先導入sys包,然後在**裡呼叫修改預設編碼方式的方法setdefaultencoding

下面解釋原因:這個問題是由於unicode編碼與ascii編碼不相容造成的。

首先在不新增以上**的前提下先檢視python呼叫的預設編碼:

import sys

print sys.getdefaultencoding()

通常都是ascii,由於python自然呼叫ascii編碼解碼程式去處理字元流,當字元流不屬於ascii範圍內,就會丟擲異常(ordinal not in range(128))。所以解決方法就是修改預設編碼,需要注意的是需要先呼叫reload方法。

reload

(sys)

sys.setdefaultencoding

('utf-8')

解決上面這個問題,執行**

成功爬取到了5175部電影的資訊。

go爬蟲之爬取豆瓣電影

好久沒使用go語言做個專案了,上午閒來無事花了點時間使用golang來爬取豆瓣top電影,這裡我沒有用colly框架而是自己設計簡單流程。mark一下 思路定義兩個channel,乙個channel存放web網頁源內容,另乙個存放提取後的有效內容。多個goroutine併發爬取網頁源內容放到存放we...

Python爬蟲 爬取豆瓣電影(二)

檢視上乙個專案,請看 上乙個專案中獲取到了一定數量的電影url資訊,這次來獲取單個電影的電影詳情。對傳遞的url返回乙個名為soup的beautifulsoup物件 defget url html soup url header request body.get header proxies req...

python爬蟲爬取豆瓣電影資訊

我們準備使用python的requests和lxml庫,直接安裝完之後開始操作 目標爬取肖申克救贖資訊 傳送門 導入庫import requests from lxml import etree 給出鏈結 url 獲取網頁html前端 一行搞定,在requests中已經封裝好了 data reque...