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

高洛峰
发布: 2016-11-03 16:53:31
原创
1929 人浏览过

这个插件可以方便查看包括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源代码:wKioL1gayqiA24f3AAGc29LICkg728.png

可以发现电影名称放在 中,同时英文名也放在 中。

可以利用正则表达式(.*)匹配电影的中文名和英文名,但这里只想得到中文名,所以需要过滤英文名。

过滤方法可以利用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;
登录后复制


相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!