首頁 >後端開發 >Python教學 >利用python2.7抓取豆瓣電影top250

利用python2.7抓取豆瓣電影top250

高洛峰
高洛峰原創
2016-11-03 16:53:311963瀏覽

這個外掛可以方便查看包括HTML在內許多內容

打開豆瓣電影排行榜top250網頁,發現每頁有25部電影,一共10頁,其每一頁url具有以下特徵:

http://movie .douban.com/top250?start=0

http://movie.douban.com/top250?start=25

http://movie.douban.com/top250?start=50

http:// movie.douban.com/top250?start=75

......

以此類推因此只需要利用循環對後面的0,25,...225處理即可。

網頁點選任何一個電影中文名,右鍵滑鼠「查看元素」查看HTML原始碼:利用python2.7抓取豆瓣電影top250

可以發現電影名稱放在 中,同時英文名也放在 中。

可以利用正規表示式(.*)來配對電影的中文名和英文名,但這裡只想得到中文名,所以需要過濾英文名。

過濾方法可以利用find(str,pos_start,pos_end)函數實現,剔除英文名字里特有的特徵:‘ ’和‘/’,詳見代碼。

3.程式碼實作

這裡程式碼比較簡單,因此就不用定義函數了。

#!/usr/bin/python
# -*- coding: utf-8 -*- #
import requests,sys,re
from bs4 import BeautifulSoup

reload(sys)
sys.setdefaultencoding('utf-8')
print '正在从豆瓣电影Top250抓取数据......'

for page in range(10):
    url='https://movie.douban.com/top250?start='+str((page-1)*25)
    print '---------------------------正在爬取第'+str(page+1)+'页......--------------------------------'
    html=requests.get(url)
    html.raise_for_status()
    try:
        soup=BeautifulSoup(html.text,'html.parser')
        soup=str(soup) # 利用正则表达式需要将网页文本转换成字符串
        title=re.compile(r&#39;<span class="title">(.*)</span>&#39;)
        names=re.findall(title,soup)
        for name in names:
            if name.find(&#39; &#39;)==-1 and name.find(&#39;/&#39;)==-1: # 剔除英文名(英文名特征是含有&#39; &#39;和&#39;/&#39;)
                print name
            # 创建名称,评分
    except Exception as e:
        print e
print &#39;爬取完毕!&#39;


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn