python2.7抓取豆瓣電影top250


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

1.任務說明

  • 抓取top100電影名稱
  • 依次打印輸出

2.網頁解析

  • 要進行網絡爬蟲,利用工具(如瀏覽器)查看網頁HTML文件的相關內容是很有必要,我使用的是Firefox瀏覽器,並安裝了Firebug插件,

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

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

......
以此類推因此只需要利用循環對后面的0,25,...225處理即可。
  • 網頁點擊任何一個電影中文名,右擊鼠標“查看元素”查看HTML源代碼:
可以發現電影名稱放在<span class="title"> </span>中,同時英文名也放在<span class="title"> </span>中。
可以利用正則表達式<span class="title">(.*)</span>匹配電影的中文名和英文名,但這里只想得到中文名,所以需要過濾英文名。
過濾方法可以利用find(str,pos_start,pos_end)函數實現,剔除英文名字里特有的特征:‘ ’和‘/’,詳見代碼。

3.代碼實現

這里代碼比較簡單,因此就不用定義函數了。

 1 #!/usr/bin/python
 2 # -*- coding: utf-8 -*- #
 3 import requests,sys,re
 4 from bs4 import BeautifulSoup
 5 
 6 reload(sys)
 7 sys.setdefaultencoding('utf-8')
 8 print '正在從豆瓣電影Top250抓取數據......'
 9 
10 for page in range(10):
11     url='https://movie.douban.com/top250?start='+str((page-1)*25)
12     print '---------------------------正在爬取第'+str(page+1)+'頁......--------------------------------'
13     html=requests.get(url)
14     html.raise_for_status()
15     try:
16         soup=BeautifulSoup(html.text,'html.parser')
17         soup=str(soup) # 利用正則表達式需要將網頁文本轉換成字符串
18         title=re.compile(r'<span class="title">(.*)</span>')
19         names=re.findall(title,soup)
20         for name in names:
21             if name.find('/')==-1: # 剔除英文名(英文名特征是含有'/')
22                 print name
23     except Exception as e:
24         print e
25 print '爬取完畢!'

由於水平有限,難免存在不足,歡迎大家斧正!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM