豆瓣電影反爬蟲機制升級了,網上的Python爬蟲教程基本上都不能用了。以前直接requests.get()就能獲取的頁面現在是<Response [418]>錯誤。2020年正確的豆瓣電影爬蟲姿勢是怎樣的?
Headers是什麼?就是你向豆瓣伺服器索要網頁時候附帶遞過去的名片,這裡記錄了你的全部個人信息。
瀏覽器每次向豆瓣伺服器發出請求的時候都會帶名片一起送過去,所以我們只要找到瀏覽器送的這張名片,用Python發送請求的時候也打包送過去,那麼就也能獲得數據。
使用谷歌瀏覽器Chrome,以我們要抓取的TOP250電影數據為例,https://movie.douban.com/top250,打開這個地址,頁面空白處【右鍵/檢查】打開開發工具面板,如下圖所示。
在開發工具面板點【Network】【top250(網頁地址最後一段)】,右側【Headers】下面就會有一組【Request Headers】內容,然後用滑鼠劃選全部,右鍵複製。
然後使用下面的代碼把這段Headers字符變為可以使用的字典對象格式,{&39;:&39;,&39;:&39;...}。
header_str=&39;&39;&39;39;;&39;=&39;:&39;&39;\n&39;: &39;Content-Length&39;Content-Length&39;Accept&39;text/html..., &39;: &39;https://movie.douban.com/top250&39;Accept-Encoding&39;gzip, deflate, br&39;accept-encoding&39;gzip&39;https://movie.douban.com/top250&39;accept-encoding&39;br&39;https://movie.douban.com/top250&39;Content-Encoding&39;Content-Encoding&39;br&39;utf-8&34;item&34;item&39;div&39;item&39;div&39;item&39;accept-encoding&39;gzip&39;https://movie.douban.com/top250?start=&39;div&39;item&34;item&34;pic&34;&34;https://movie.douban.com/subject/1292720/&34;100&34;阿甘正傳&34;https://img9.doubanio.com/view/photo/s_ratio_poster/public/p1484728154.webp&34;&34;info&34;hd&34;https://movie.douban.com/subject/1292720/&34;&34;title&34;title&34;other&34;playable&34;bd&34;&34;star&34;rating5-t&34;rating_num&34;v:average&34;v:best&34;10.0&34;quote&34;inq&39;div&39;hd&39;a&39;\n&39;&34;NFKD&39;阿甘正傳 / Forrest Gump / 福雷斯特·岡普&39;div&39;bd&39;p&39;title&39;div&39;hd&39;a&39;daoyan&34;導演:\\s(.*_?)[\xa0\.\.\.]&39;導演:&39;&39;nianfen&39;\n&39;/&39;guojia&39;\n&39;/&39;leixing&39;\n&39;/&34;NFKD&39;\n&39;&34;導演:\\s(.*_?)[\xa0\.\.\.]&39;Movies250.xlsx')df
輸出如下: