Python爬虫小项目:猫眼电影排行榜TOP100

第一次写博客,写的不好的或讲不清楚的地方还请多多包涵,那么开始吧。
这次的爬虫小项目,爬取的是猫眼电影排行榜top100的电影相关信息,算是比较简单的项目,接下来是具体的说明:
【运行环境:PyCharm】

  • 首先是需要导入的模块
    1.requests:用于获取目标网页
    2.lxml:解析获取的网页
    3.json:用于生成一个json文件,JSON对我们而言就是通用的数据格式,任何语言都能够解析
    4.time:时间控制模块,这里是使爬取信息的时候有停顿

  • 接着是目标网站:猫眼电影
    Python爬虫小项目:猫眼电影排行榜TOP100_第1张图片
    榜单第一页的网址:https://maoyan.com/board/4?offset=0
    榜单第二页的网址:https://maoyan.com/board/4?offset=10
    以此类推,有变化的是**offset=**后面的值,可以利用这个,用for循环来获取榜单总共10页的信息。

  • 获取网页源码
    用requests的get方法来获取,并用for循环来获取全部10页的源码
    在这里插入图片描述

  • 解析网页,提取所需信息并写入本地文件
    1.用lxml模块中的etree来解析网页;
    在这里插入图片描述
    2.利用xpath来提取网页的信息,XPath 使用路径表达式在 HTML 文档中选取节点;
    Python爬虫小项目:猫眼电影排行榜TOP100_第2张图片
    这次爬取的是电影的名字、主演以及上映时间,所以对应的路径表达式如下图所示:
    Python爬虫小项目:猫眼电影排行榜TOP100_第3张图片
    //p 表示选取所有p标签的子元素,而不管它们在文档中的位置;
    @ 表示选取属性;
    text() 表示文本内容;
    3.写入本地文件
    在这里插入图片描述
    这一步需要导入json模块,写入文件的路径为F:\python\re.txt(可更改),最终的结果是以字典格式来显示;
    加入 ensure_ascii=False 可以防止中文乱码

  • 最终的结果
    Python爬虫小项目:猫眼电影排行榜TOP100_第4张图片
    由于结果篇幅比较大,就截取了榜单第一页的内容。
    大致就是这样~~

附上完整代码:

# 导入模块
import requests  # 获取目标网站所需的模块
from lxml import etree  # 解析所需的模块
import json
import time

class MaoYan(object):
    '''获取猫眼电影TOP100'''
    def getOnePage(self,url):
        '''获取网页源码'''
        html = requests.get(url)
        return html.text

    def parseOnePage(self,text):
        '''解析网站 提取网页信息 使用XPath'''
        html = etree.HTML(text)
        # 电影名称
        name = html.xpath('//p[@class="name"]//text()')
        # 主演
        star = html.xpath('//p[@class="star"]//text()')
        # 上映时间
        releasetime = html.xpath('//p[@class="releasetime"]//text()')
        for item in range(len(name)):
            yield {
                'name':name[item],
                'star':star[item].strip(),
                'releasetime':releasetime[item].strip()
            }

    @staticmethod # 静态方法
    def write3File(content):
        '''写入文件'''
        with open('F:\\python\\re.txt','a',encoding='utf-8') as fp:
            fp.write(json.dumps(content,ensure_ascii=False)+'\n') # ensure_ascii=False 防止中文乱码

if __name__ == '__main__':
    maoyan=MaoYan()
    for offSet in range(10): # 用for循环爬取全部10页的信息
        time.sleep(1) # 程序运行到这个地方要停顿一秒
        url = 'https://maoyan.com/board/4?offset={}'.format(offSet*10)
        html = maoyan.getOnePage(url)
        text = maoyan.parseOnePage(html)

        for item in text:
            maoyan.write3File(item)
            print(item)

你可能感兴趣的:(Python爬虫小项目:猫眼电影排行榜TOP100)