python豆瓣的簡單爬蟲
阿新 • • 發佈:2019-03-07
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豆瓣的簡單爬蟲