技术爬虫编程基础知识

30行代码抓取豆瓣电影排行榜评分

2016-04-30  本文已影响3729人  sambor

30行代码抓取豆瓣电影排行榜

代码基于python3,用到的类库有requests,beautifulsoup。直接上代码github

pip install requests
pip install BeautifulSoup4

两个类库各司其职,Requests负责请求并加载网页,BeautifulSoup 用于解析html文档,强烈建议参考Requests文档BeautifulSoup文档

import requests
from bs4 import BeautifulSoup
# 获得指定起始排名的电影url
def get_url(root_url,start):
    return root_url+"?start="+str(start)+"&filter="
# 根据传入的url,获取电影排名及评分,代码如下
def get_review(page_url):
    #存放电影信息的列表
    movies_list=[]
    #请求url,返回response对象
    response=requests.get(page_url)
    #指定lxml解析器解析html文档
    soup=BeautifulSoup(response.text,"lxml")
    #获取包含所有电影信息的节点
    soup=soup.find('ol','grid_view')
    #循环获取单个节点
    for tag_li in soup.find_all('li'):
        dict={}
        #排名
        dict['rank']=tag_li.find('em').string
        #名称
        dict['name']=tag_li.find_all('span','title')[0].string
        #评分
        dict['score']=tag_li.find('span','rating_num').string
        #有的电影短评为空,为防止抓取到一半出错,需判断是否为空
        if(tag_li.find('span','inq')):
            dict['desc']=tag_li.find('span','inq').string
        movies_list.append(dict)
    return movies_list
if __name__ == "__main__":
    root_url="https://movie.douban.com/top250"
    start=0
    while(start<250):
        movies_list=get_review(get_url(root_url,start))
        for movie_dict in movies_list:
            print('电影排名:'+movie_dict['rank'])
            print('电影名称:'+movie_dict.get('name'))
            print('电影评分:'+movie_dict.get('score'))
            print('电影评词:'+movie_dict.get('desc','无评词'))
            print('------------------------------------------------------')
        start+=25
# -*- coding: UTF-8 -*-
"""
 获取豆瓣电影评分排行榜
"""
import requests
from bs4 import BeautifulSoup


# 获得指定开始排行的电影url
def get_url(root_url,start):
    return root_url+"?start="+str(start)+"&filter="

def get_review(page_url):
    movies_list=[]
    response=requests.get(page_url)
    soup=BeautifulSoup(response.text,"lxml")
    soup=soup.find('ol','grid_view')
    for tag_li in soup.find_all('li'):
        dict={}
        dict['rank']=tag_li.find('em').string
        dict['name']=tag_li.find_all('span','title')[0].string
        dict['score']=tag_li.find('span','rating_num').string
        if(tag_li.find('span','inq')):
            dict['desc']=tag_li.find('span','inq').string
        movies_list.append(dict)
    return movies_list

if __name__ == "__main__":
    root_url="https://movie.douban.com/top250"
    start=0
    while(start<250):
        movies_list=get_review(get_url(root_url,start))
        for movie_dict in movies_list:
            print('电影排名:'+movie_dict['rank'])
            print('电影名称:'+movie_dict.get('name'))
            print('电影评分:'+movie_dict.get('score'))
            print('电影评词:'+movie_dict.get('desc','无评词'))
            print('------------------------------------------------------')
        start+=25

感谢阅读我的文章,转载请注明作者

上一篇 下一篇

猜你喜欢

热点阅读