從豆瓣電影批量獲取看過這部電影的使用者列表

發表於2015-10-12

前言

由於之後要做一個實驗,需要用到大量豆瓣使用者的電影資料,因此想到了從豆瓣電影的“看過這部電影 的豆瓣成員”頁面上來獲取較為活躍的豆瓣電影使用者。

連結分析

這是看過”模仿遊戲”的豆瓣成員的網頁連結:http://movie.douban.com/subject/10463953/collections。

一頁上顯示了20名看過這部電影的豆瓣使用者。當點選下一頁時,當前連線變為:http://movie.douban.com/subject/10463953/collections?start=20。

由此可知,當請求下一頁內容時,實際上就是將”start”後的索引增加20。

因此,我們可以設定base_url=’http://movie.douban.com/subject/10463953/collections?start=’,i=range(0,200,20),在迴圈中url=base_url+str(i)。

之所以要把i的最大值設為180,是因為後來經過測試,豆瓣只給出看過一部電影的最近200個使用者。

讀取網頁

在訪問時我設定了一個HTTP代理,並且為了防止訪問頻率過快而被豆瓣封ip,每讀取一個網頁後都會呼叫time.sleep(5)等待5秒。 在程式執行的時候幹別的事情好了。

網頁解析

本次使用BeautifulSoup庫解析html。

每一個使用者資訊在html中是這樣的:

首先用讀取到的html初始化soup=BeautifulSoup(html)。本次需要的資訊僅僅是使用者id和使用者的電影主頁,因此真正有用的資訊在這段程式碼中:

因此在Python程式碼中通過td_tags=soup.findAll(‘td’,width=’80’,valign=’top’)找到所有<td width=”80″ valign=”top”>的塊。

td=td_tags[0],a=td.a就可以得到

通過link=a.get(‘href’)可以得到href屬性,也就使用者的電影主頁連結。然後通過字串查詢也就可以得到使用者ID了。

完整程式碼

相關文章