Python 使用urllib2和BeautifulSoup爬取实例

摘要:Python 使用urllib2和BeautifulSoup爬取实例...

作者:LoveCode标签:Python,urllib2,BeautifulSoup,爬取实例

用urllib2 和BeautifulSoup抓取分析网页

以抓取豆瓣电影Top250的排行信息为例,本以为还要做个爬虫,后来发现那排行有文本列表显示的选项,直接把Top250个电影信息在一个页面显示出来了,所以只要用urllib2下载页面,再用BeautifulSoup分析就行了。

 

Beautiful Soup第三方库的下载地址http://www.crummy.com/software/BeautifulSoup/,其使用方法很简单的,可以详见参考文档。注意的是,Beautiful Soup将所遇到的各种编码方式都转为UTF-8的编码格式,在显示分析结果时,必须注意原网页的编码方式,这样才能正常显示。

 

首先要分析豆瓣电影Top250的源代码,其列出排行结果的主要代码如下:

<table class="list_view" summary="豆瓣电影250: 序号 影片名 评分 评价人数">
      <caption>豆瓣电影250</caption>
      <thead>
            <tr>
                 <th id="m_order" width="20"></th>
                 <th id="m_name" width="460"></th>
                 <th id="m_rating_score" width="39">评分</th>
                 <th id="m_rating_num">评价人数</th>
           </tr>
      </thead>
     <tbody>
           <tr class="item">
               <td headers="m_order" class="m_order">
                  1
               </td>
               <td headers="m_name">
                     <a href="http://movie.douban.com/subject/1292052/">肖申克的救赎 / The Shawshank Redemption</a>
                 <span class="year">1994</span>
               </td>
               <td headers="m_rating_score">
                    <em>9.5</em>
               </td>
               <td headers="m_rating_num">
                    445262
               </td>
           </tr>
     </tbody>
</table>

对其分析,获得排名信息的,简单python代码如下:

# _*_ coding:utf-8 _*_ 
import urllib2 
import re
from bs4 import BeautifulSoup

def crawl(url): 
   page = urllib2.urlopen(url) 
   contents = page.read() 
   soup = BeautifulSoup(contents) 
   print(u'豆瓣电影250: 序号 \t影片名\t 评分 \t评价人数') 
   
   for tag in soup.find_all('tr', class_='item'): 
       m_order = int(tag.find('td', class_='m_order').get_text()) 
       m_name = tag.a.get_text() 
       m_year = tag.span.get_text() 
       m_rating_score = float(tag.em.get_text()) 
       m_rating_num = int(tag.find(headers="m_rating_num").get_text()) 
       print("%s %s %s %s %s" % (m_order, m_name, m_year, m_rating_score, m_rating_num))
       
if __name__ == '__main__': 
    crawl('http://movie.douban.com/top250?format=text')
CopyRight © 2017 荒山本的官方网站 粤ICP备16049175号 All Right Service 网站地图(xml) 网站地图(html)