1. 程式人生 > >python豆瓣的簡單爬蟲

python豆瓣的簡單爬蟲

lin 找到 use gecko ict 證書 ssl base_url bject

https://movie.douban.com/

直奔主題,給個要爬取的豆瓣電影地址,爬取熱門電影名字。

技術分享圖片

右鍵選擇查看網頁源碼,我們可以發現在網頁靜態源碼裏,是找不到‘來電狂想’這些關鍵字的。

技術分享圖片

通過檢查網頁,查看network下的XHR,我們可以找到對應的信息。說明我們想要爬取的這部分內容是通過Ajax從後臺拿到的json數據。

技術分享圖片

copy link address得到訪問的url:https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%83%AD%E9%97%A8&page_limit=50&page_start=0

分析url,傳入的參數:

{type: movie, tag: 熱門, page_limit: 50, page_start: 0}  # 數據類型是電影,標簽是熱門,返回數據總數50條,數據起始位置第0條

於是我們就可以寫個腳本,將0-50條json數據裏title字段的值(熱門電影的名字)爬取下來。

from urllib.parse import urlencode
from urllib.request import urlopen, Request
import simplejson
import ssl

# 偽裝成瀏覽器
ua = 
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36 base_url = https://movie.douban.com/j/search_subjects d = { type: movie, tag: 熱門, page_limit: 50, page_start: 0 } # ssl驗證問題:忽略不信任的證書。就可以訪問該網站 context = ssl._create_unverified_context()
# url編碼後,傳入Request()函數;headers參數偽裝瀏覽器 req = Request({}?{}.format(base_url, urlencode(d)), headers={User-agent: ua}) with urlopen(req, context=context) as res: res = simplejson.loads(res.read()) # json轉dict for subject in res[subjects]: print(subject[title]) # 取出電影名字 with open(douban.txt, a) as f: f.write(subject[title] + \n)

部分結果:

小偷家族
蜘蛛俠:平行宇宙
三次元女友
悠哉日常大王劇場版:假期活動
獨家記憶番外之相信愛
波西米亞狂想曲
白蛇:緣起
誰先愛上他的
“大”人物
無敵破壞王2:大鬧互聯網
來電狂響
神奇動物:格林德沃之罪
無名之輩
毒液:致命守護者

python豆瓣的簡單爬蟲