python学习-获取时光网电影TOP100电影信息

一、知识点

1、通过requests.get获取页面html代码
2、通过lxml的etree模块配合xpath方法获取需要的内容
3、json文件的加载和提取相关内容
4、其它:for语句、字符串截取、元祖的使用等

二、代码

在经过一段时间学习python的基本知识,同时也照葫芦画瓢了一段时间后,编写了下面的python程序,实现对时光网电影TOP100的电影信息进行提取。

#-*- coding=utf-8 -*-
import requests
import time
import json
from lxml import etree

#获取页面的html并返回etree
def get_html_tree(url,headers):
    resp = requests.get(url,headers=headers).text
    resp_tree = etree.HTML(resp)
    return resp_tree

#获取初始页的电影链接
def get_movie_link(resp_tree):
    links = resp_tree.xpath('//div[@class="mov_con"]//h2/a/@href')
    return links

#对每个电影页面进行解析
def parse_page(movie_tree,movie_id):
    #从json中获取电影评分
    surl = 'http://service.library.mtime.com/Movie.api?Ajax_CallBack=true&Ajax_CallBackType=Mtime.Library.Services&Ajax_CallBackMethod=GetMovieOverviewRating&Ajax_CrossDomain=1&Ajax_RequestUrl=http%3A%2F%2Fmovie.mtime.com%2F'+movie_id+'%2F&Ajax_CallBackArgument0='+movie_id
    sresp = requests.get(surl,headers=headers)
    b = sresp.text.find('MovieId')
    e = sresp.text.find('IP":0')
    sjson = json.loads(sresp.text[b-2:e+6])
    s = sjson['RatingFinal']
    #获取电影名称,年份和内容简介
    name = movie_tree.xpath('//div[@class="db_head"]//h1/text()')
    year = movie_tree.xpath('//div[@class="db_head"]//p/a/text()')
    content = movie_tree.xpath('//*[@id="movie_warp"]//dl/dt/p[1]/text()')
    return name,s,year,content

#获取下一页的链接
def get_page_links(resp_tree):
    all_page_links = resp_tree.xpath('//*[@id="PageNavigator"]/a/@href')
    return all_page_links

def main():
    global headers
    url = 'http://www.mtime.com/top/movie/top100/'
    headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36'}
    top = 1
    for page in range(2,12):
        resp_tree = get_html_tree(url,headers)
        links = get_movie_link(resp_tree)
        for link in links:
            movie_tree = get_html_tree(link,headers)
            movie_id = str(link)[23:-1]
            movie=parse_page(movie_tree,movie_id)
            print('%d:' %top, '电影名称:%s' %movie[0])
            print('评分:%s' %movie[1])
            print('年代:%s' %movie[2])
            print('内容介绍:%s' %movie[3])
            top += 1
        url = 'http://www.mtime.com/top/movie/top100/index-%d.html' %page

if __name__ == '__main__':
    main()

运行结果:

1: 电影名称:['肖申克的救赎']
评分:9.2
年代:['1994']
内容介绍:['银行家安迪因被陷害杀害妻子与她的情夫,被判两个终身监禁。入狱后,影片便以黑人狱友瑞德冷静的旁白来推进。监狱数十年如一日的改造会使原本自由的心灵习惯了牢笼的禁锢,而这也将是安迪的命运?', '全球各地的新一代电影人也都在逐步扬名,中国的第五代导演走上了历史舞台,日本的黑泽明大师虽然步..']
2: 电影名称:['盗梦空间']
评分:9.1
年代:['2010']
内容介绍:['多姆·柯布能够潜入人们的梦境中,窃取潜意识中有价值的秘密,这也使他成为了一名国际逃犯。为了重回原本的生活,柯布和他的团队接受了一项任务,这次不是窃取思想,而是植入思想。如果他们成功,这就是一次完美犯罪。', '在《盗梦空间》中扮演小李子岳父的演员迈克尔·凯恩近日揭开了结尾的谜底,或许你早已经猜出来了,..']
3: 电影名称:['阿甘正传']
评分:9.1
年代:['1994']
内容介绍:['阿甘的智商只有75,但凭借跑步的天赋,他顺利大学毕业。在越南战场,他结识了“捕虾迷”布巴和丹中尉。回国后,阿甘机缘巧合累积了大量资产。不过,钱并不是阿甘所看重的东西。阿甘和珍妮青梅竹马,可珍妮有自己的梦想……', '在距离《阿甘正传》问世20多年后,2D蓝光版首次引进中国大陆,并由泰盛文化发行。']

三、总结

虽然对于python的知识点已经看了很多遍,但是在真正编写程序时发现自己还是有很多不懂的地方。比如电影的评分,直接通过html代码无法获得,需要通过json的url获得相关的代码,再从中提取电影评分。虽然代码还存在很多不完善的地方,这只是一个开端,继续努力学习,希望能够尽早掌握python的编程。
在写这个代码期间,看了很多文章,感谢大家的分享!

你可能感兴趣的:(python)