您的位置:首页 > 编程语言 > Python开发

笔记整理——Python爬虫(三):基本概念及常用基本方法

2020-06-02 05:45 459 查看

笔记整理——Python爬虫(三):基本概念及常用基本方法

  • 二、爬虫请求模块
  • 三、URL地址编码模块
  • 四、正则解析模块
  • 一、爬虫基本概念

    定义

    网络蜘蛛、网络机器人,抓取网络数据的程序
    其实就是用Python程序模仿人点击浏览器并访问网站,而且模仿的越像越好,让Web站点无法发现你不是人

    使用爬虫的目的

    1、公司项目测试数据
    2、公司业务部门及其他部门所需数据
    3、数据分析

    企业获取数据的方式

    1、公司自有数据
    2、第三方数据平台购买(数据堂、贵阳大数据交易所)
    3、爬虫爬取数据

    使用Python做爬虫的优势

    1、Python :请求模块、解析模块丰富成熟,强大的Scrapy网络爬虫框架
    2、PHP :对多线程、异步支持不太好
    3、JAVA:代码笨重,代码量大
    4、C/C++:虽然效率高,但是代码成型慢

    爬虫分类

    1、通用网络爬虫(搜索引擎使用,遵守robots协议)
    robots协议 :网站通过robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取,通用网络爬虫需要遵守
    robots协议(君子协议)
    https://www.taobao.com/robots.txt
    2、聚焦网络爬虫 :自己写的爬虫程序

    通用爬取步骤(语义层面概括)

    1、确定需要爬取的URL地址
    2、由请求模块向URL地址发出请求,并得到网站的响应
    3、从响应内容中提取所需数据
    1、所需数据,保存
    2、页面中有其他需要继续跟进的URL地址,继续第2步去发请求,如此循环

    二、爬虫请求模块

    模块及导入

    1、模块名:urllib.request
    2、导入方式:
    1、import urllib.request
    2、from urllib import request

    常用方法详解

    urllib.request.urlopen

    • 作用
      向网站发起请求并获取响应对象
    • 语法
    变量名 = urllib.requrest.urlopen(url,timeout)
    • 参数
    1.url:需要爬取的网站的URL地址
    2.timeout:设置等待超时时间,指定时间内未得到响应则抛出超时异常
    • 示例1:最简单的爬虫程序——输入百度地址(‘http://www.baidu.com’),得到百度首页的响应内容
    import urllib.request
    # urlopen() : 向URL发请求,返回响应对象,保存变量于response
    response=urllib.request.urlopen('http://www.baidu.com/')
    # 提取响应内容:响应对象调用read方法读取对应的响应内容,因为得到的是字节串,所以解码为字符串,注意设置编码方式utf-8
    html = response.read().decode('utf-8')
    # 打印响应内容
    print(html)
    • 响应对象(response)方法
    1、bytes = response.read() # read()得到结果为 bytes 数据类型
    2、string = response.read().decode() # decode() 转为 string 数据类型
    3、url = response.geturl() # 返回实际数据的URL地址
    4、code = response.getcode() # 返回HTTP响应码
    # 补充
    5、string.encode() # bytes -> string
    6、bytes.decode() # string -> bytes

    思考:网站是如何判断是人类正常访问还是爬虫程序访问?接下来通过一段简单测试代码查看:

    import urllib.request
    # 向测试网站:http://httpbin.org/get发送请求,获取响应对象并查看请求头
    response = urllib.request.urlopen('http://httpbin.org/get')
    # 响应对象读取响应内容并转为字符串显示
    html = response.read().decode('utf-8')
    print(html)
    
    ====================================================================================
    
    得到的响应结果如下:
    
    /home/anwc/anaconda3/bin/python /home/anwc/文档/文档、代码杂七八/code_demo.py
    {
    "args": {},
    "headers": {
    "Accept-Encoding": "identity",
    "Host": "httpbin.org",
    "User-Agent": "Python-urllib/3.6",
    "X-Amzn-Trace-Id": "Root=1-5eb51309-98987ec462d6a7fe19b38aea"
    },
    "origin": "27.18.84.11",
    "url": "http://httpbin.org/get"
    }
    
    Process finished with exit code 0
    
    ====================================================================================
    
    通过响应内容我们发现:请求头中User-Agent竟然是:Python-urllib/3.6!!!!!!!!!!!!!!!!!!!
    
    我们需要重构User-Agent,发请求时带着User-Agent过去,但是 urlopen()方法不支持重构User-Agent!
    
    那我们怎么办?请看下面的方法!!!

    urllib.request.Request

    • 作用
      创建请求对象(包装请求,重构User-Agent,使程序更像正常人类请求)
    • 语法
    response = urllib.request.Request(url = url,headers = headers)
    • 参数
    1、url:请求的URL地址
    2、headers:添加请求头(爬虫和反爬虫斗争的第一步)
    • 使用流程
    1、构造请求对象(重构User-Agent)
    2、发请求获取响应对象(urlopen)
    3、获取响应对象内容
    • 示例2:向测试网站发起请求,构造请求头并从响应对象中确认请求头信息
    from urllib import request
    
    # 定义常用变量
    url = 'http://httpbin.org/get'
    headers = {'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'}
    # 1.创建请求对象
    req = request.Request(url=url,headers=headers)
    # 2.获取响应对象
    resp = request.urlopen(req)
    # 3.提取响应内容
    html = resp.read().decode()
    
    print(html)
    
    ==================================================================================
    
    得到的响应信息如下:
    
    /home/anwc/anaconda3/bin/python /home/anwc/文档/文档、代码杂七八/code_demo.py
    {
    "args": {},
    "headers": {
    "Accept-Encoding": "identity",
    "Host": "httpbin.org",
    "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36",
    "X-Amzn-Trace-Id": "Root=1-5eb515fc-67a09f30af080940ecd78190"
    },
    "origin": "27.18.84.11",
    "url": "http://httpbin.org/get"
    }
    
    Process finished with exit code 0

    三、URL地址编码模块

    模块及导入

    • 模块
    # 模块名
    urllib.parse
    # 导入
    import urllib.parse
    from urllib import parse
    • 作用
      给URL地址中查询参数进行编码
    编码前:https://www.baidu.com/s?wd=美女
    编码后:https://www.baidu.com/s?wd=%E7%BE%8E%E5%A5%B3

    常用方法详解

    urllib.parse.urlencode({dict})

    • URL地址中查询一个参数 示例3:给定一个查询参数并将其进行编码
    import urllib.parse
    # 给定一个查询参数
    query_str = {'wd':'美眉'}
    # 调用urlencode方法将其编码
    result = urllib.parse.urlencode(query_str)
    print(result)
    • URL地址中多个查询参数 示例4:给定多个查询参数并将其进行编码
    from urllib import parse
    params = {
    'wd':'美眉',
    'pn':'50'
    }
    params = parse.urlencode(params)
    url = 'http://www.baidu.com/s?{}'.format(params)
    print(url)
    • 拼接URL地址的3种方式
    # 1、字符串相加
    baseurl = 'http://www.baidu.com/s?'
    params = 'wd=%E7XXXX&pn=20'
    url = baseurl + params
    # 2、字符串格式化(占位符)
    params = 'wd=%E7XXXX&pn=20'
    url = 'http://www.baidu.com/s?%s'% params
    # 3、format()方法
    url = 'http://www.baidu.com/s?{}'
    params = 'wd=#E7XXXX&pn=20'
    url = url.format(params)
    • 示例5:在百度种输入要搜索的内容,把响应内容保存到本地文件
    from urllib import request,parse
    # 拼接URL
    my_input = input('请输入你要搜索的内容:')
    parmas = parse.urlencode({'wd':my_input})
    url = 'http://www.baidu.com/s?{}'.format(parmas)
    
    # 创建请求头
    headers = {
    'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'
    }
    
    # 创建请求对象
    req = request.Request(url=url,headers=headers)
    # 获取响应对象并读取响应内容
    response = request.urlopen(req)
    result = response.read().decode()
    # 将响应内容写入文件
    filename = my_input + '.html'
    with open(filename,'w') as f:
    f.write(result)

    quote(str)编码

    • 示例6:对单个字符串进行编码
    from urllib import parse
    str1 = '美眉'
    print(parse.quote(str1))
    • 示例7:针对示例5,将URL编码改为使用quote方法实现
    from urllib import request,parse
    # 拼接URL
    my_input = input('请输入你要搜索的内容:')
    parmas = parse.quote(my_input)
    url = 'https://www.baidu.com/s?wd={}'.format(parmas)
    
    # 创建请求头
    headers = {
    'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'
    }
    
    # 创建请求对象
    req = request.Request(url=url,headers=headers)
    # 获取响应对象并读取响应内容
    response = request.urlopen(req)
    result = response.read().decode()
    # 将响应内容写入文件
    filename = my_input + '.html'
    with open(filename,'w') as f:
    f.write(result)

    unquote(str)解码

    • 示例8:对单个字符进行解码
    from urllib import parse
    string = '%E7%BE%8E%E5%A5%B3'
    result = parse.unquote(string)
    print(result)

    示例9:百度贴吧数据抓取案例

    • 要求
    1、输入贴吧名称
    2、输入起始页
    3、输入终止页
    4、保存到本地文件。文件名称格式:吧名-第1页.html、吧名-第2页.html ...
    ===================================================================
    思路:举例百度高圆圆吧
    第一步:分析页面URL:
    首页URL:https://tieba.baidu.com/f?kw=%E9%AB%98%E5%9C%86%E5%9C%86&ie=utf-8&pn=0
    第二页URL:https://tieba.baidu.com/f?kw=%E9%AB%98%E5%9C%86%E5%9C%86&ie=utf-8&pn=50
    第三页URL:https://tieba.baidu.com/f?kw=%E9%AB%98%E5%9C%86%E5%9C%86&ie=utf-8&pn=100
    第四页URL:https://tieba.baidu.com/f?kw=%E9%AB%98%E5%9C%86%E5%9C%86&ie=utf-8&pn=150
    ...
    第N页URL:https://tieba.baidu.com/f?kw=%E9%AB%98%E5%9C%86%E5%9C%86&ie=utf-8&pn=(n-1) * 50
    第二步:拼接页面URL
    第三步:请求并获取响应内容
    第四步:写入文件保存
    ===================================================================
    编码:
    from urllib import request,parse
    from time import sleep
    from random import randint
    
    class BaiDuTieBaSpider(object):
    '''
    面向对象编码
    
    '''
    def __init__(self):
    self.__url = 'https://tieba.baidu.com/f?kw={}&ie=utf8&pn={}'
    
    @property
    def url(self):
    return self.__url
    # 实例方法:获取页面内容
    def __get_html(self,url):
    # 创建请求头
    headers = {'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'}
    # 创建请求对象
    req = request.Request(url = url,headers=headers)
    return request.urlopen(req).read().decode()
    
    # 实例方法:解析页面
    def __parse_html(self):
    pass
    
    # 实例方法:写入文件并保存
    def __save_html(self,filename,html):
    with open(filename,'w') as f:
    f.write(html)
    
    # 实例方法:公共接口,入口函数
    def display(self):
    name = input('请输入贴吧名称:')
    begin = int(input('请输入起始页:'))
    end = int(input('请输入终止页:'))
    parmas = parse.quote(name)
    for page in range(begin,end + 1):
    pn = (page - 1) * 50
    url = self.__url.format(parmas,pn)
    #=================================
    print('开始爬取第%d页...'%page)
    html = self.__get_html(url)
    filename = name + '吧' + '-第%d页.html' % page
    print('第%d页爬取完毕,开始写入文件...'%page)
    self.__save_html(filename,html)
    if page < end:
    print('第%d页写入完毕,准备开始爬取下一页,稍等...'%page)
    else:
    print('最后一页写入完毕,程序即将结束...')
    sleep(randint(3,5))
    
    def test():
    BaiDuTieBaSpider().display()
    print('程序运行结束,请至本地路径查看文件内容!')
    
    if __name__ == '__main__':
    test()
    
    ===========================================================================================
    
    程序运行结果:
    
    anwc@anwc:~/文档/文档、代码杂七八$ python3 demo_sipder.py
    请输入贴吧名称:三星
    请输入起始页:1
    请输入终止页:5
    开始爬取第1页...
    第1页爬取完毕,开始写入文件...
    第1页写入完毕,准备开始爬取下一页,稍等...
    开始爬取第2页...
    第2页爬取完毕,开始写入文件...
    第2页写入完毕,准备开始爬取下一页,稍等...
    开始爬取第3页...
    第3页爬取完毕,开始写入文件...
    第3页写入完毕,准备开始爬取下一页,稍等...
    开始爬取第4页...
    第4页爬取完毕,开始写入文件...
    第4页写入完毕,准备开始爬取下一页,稍等...
    开始爬取第5页...
    第5页爬取完毕,开始写入文件...
    最后一页写入完毕,程序即将结束...
    程序运行结束,请至本地路径查看文件内容!
    
    获取的对应网页的部分内容:
    <!DOCTYPE html>
    <!--STATUS OK-->
    <html>
    <head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <link rel="search" type="application/opensearchdescription+xml" href="/tb/cms/content-search.xml" title="百度贴吧" />
    <meta name="keywords" content="三星,数码家电,企业,不懂,韩版">
    <meta name="description" content="本吧热帖: 1-不懂,为什么韩版这么便宜的吗 2-大哥们!准备买部S10   在天猫看了一家4400大洋!我想说机子是正 3-闲鱼卖了一个用了一年的s8,买家说我的屏幕老化了,他说的对吗 4-兄弟们 现在buds+有什么靠谱又便宜的渠道吗 5-淘宝三星旗舰店太坑了,大家注意,没诚信,给大家认识一下。 6-发布会内容如下 7-手持大10 bus+打字音怎么延迟这么严重你们会这样吗">
    <title>三星吧-百度贴吧 </title>
    ...

    四、正则解析模块

    re模块使用流程

    • 方法一
    r_list=re.findall('正则表达式',html,re.S)
    • 方法二
    # 1、创建正则编译对象
    pattern = re.compile(r'正则表达式',re.S)
    r_list = pattern.findall(html)

    正则表达式元字符

    元字符 含义
    . 任意一个字符(不包括\n)
    \d 一个数字
    \s 空白字符
    \S 非空白字符
    [] 包含[]内容
    * 出现0次或多次
    + 出现1次或多次

    思考:请写出匹配任意一个字符的正则表达式?

    import re
    # 方法一
    pattern = re.compile('.',re.S)
    # 方法二
    pattern = re.compile('[\s\S]')

    贪婪匹配(默认)

    1、在整个表达式匹配成功的前提下,尽可能多的匹配 *
    2、表示方式: .*

    非贪婪匹配

    1、在整个表达式匹配成功的前提下,尽可能少的匹配 *
    2、表示方式:.*?

    示例10:正则匹配演示

    import re
    
    html = '''
    <div><p>九霄龙吟惊天变</p></div>
    <div><p>风云际会浅水游</p></div>
    '''
    
    # 贪婪匹配
    p = re.compile('<div><p>.*</p></div>',re.S)
    r_list = p.findall(html)
    
    # 非贪婪匹配
    p = re.compile('<div><p>.*?</p></div>',re.S)
    r_list = p.findall(html)

    正则表达式分组

    • 作用

    在完整的模式中定义子模式,将每个圆括号中子模式匹配出来的结果提取出来

    • 示例11:分组演示
    import re
    
    s = 'A B C D'
    p1 = re.compile('\w+\s+\w+')
    print(p1.findall(s))
    # 结果: ???
    
    p2 = re.compile('(\w+)\s+\w+')
    print(p2.findall(s))
    # 结果: ???
    
    p3 = re.compile('(\w+)\s+(\w+)')
    print(p3.findall(s))
    # 结果: ???
    • 分组总结
    1、在网页中,想要什么内容,就加()
    2、先按整体正则匹配,然后再提取分组()中的内容
    如果有2个及以上分组(),则结果中以元组形式显示 [('小区1','500万'),('小区2','600万'),()]
    • 练习

    页面结构如下:

    # <div class="animal">.*?title="(.*?)".*?
    <div class="animal">
    <p class="name">
    <a title="Tiger"></a>
    </p>
    <p class="content">
    Two tigers two tigers run fast
    </p>
    </div>
    
    <div class="animal">
    <p class="name">
    <a title="Rabbit"></a>
    </p>
    
    <p class="content">
    Small white rabbit white and white
    </p>
    </div>

    从以上html代码结构中完成如下内容信息的提取:

    # 问题1
    [('Tiger',' Two...'),('Rabbit','Small..')]
    # 问题2
    动物名称 :Tiger
    动物描述 :Two tigers two tigers run fast
    ***************************************
    动物名称 :Rabbit
    动物描述 :Small white rabbit white and white
    • 代码实现
    import re
    
    html = '''
    <div class="animal">
    <p class="name">
    <a title="Tiger"></a>
    </p>
    <p class="content">
    Two tigers two tigers run fast
    </p>
    </div>
    
    <div class="animal">
    <p class="name">
    <a title="Rabbit"></a>
    </p>
    
    <p class="content">
    Small white rabbit white and white
    </p>
    </div>
    '''
    p = re.compile('<div class="animal">.*?<a title="(.*?)"'
    '.*?<p class="content">(.*?)</p>',re.S)
    r_list = p.findall(html)
    
    # 第1步: r_list: [('Tiger','\n\t\tTwo tigers'),()]
    print(r_list)
    # 第2步
    for r in r_list:
    print('动物名称:',r[0].strip())
    print('动物描述:',r[1].strip())
    print('*' * 50)
    
    ==========================================================================================
    
    运行结果:
    
    /home/anwc/anaconda3/bin/python /home/anwc/文档/文档、代码杂七八/code_demo.py
    [('Tiger', '\n\t\tTwo tigers two tigers run fast\n    '), ('Rabbit', '\n\t\tSmall white rabbit white and white\n    ')]
    动物名称: Tiger
    动物描述: Two tigers two tigers run fast
    **************************************************
    动物名称: Rabbit
    动物描述: Small white rabbit white and white
    **************************************************
    
    Process finished with exit code 0
    
    ==========================================================================================
    
    常见方法总结:
    1. strip()  - 去掉左右两侧的空白
    2. split()
    '东方美景|200万|23层'.split('|')
    ['东方美景','200万','23层']
    3. replace()
    '霸王别姬&nbsp;大话西游&nbsp;'.replace('&nbsp;',' ')
    结果: '霸王别姬 大话西游'
    4. startswith()
    5. endswith()
    if 'xxx.zip'.endswith('.zip'):
    开始抓取 xxx.zip 文件到本地
    6. join()
    '\n'.join(['第一章:大圣娶亲','第二章:月光宝盒','第三章:美人鱼'])
    '第一章:大圣娶亲\n第二章xxx'
    7. 切片

    示例12:猫眼电影top100抓取案例

    要求:
    1.获取top100榜单页面全部内容;
    2.使用正则匹配出每一条的电影名称,主演,上映时间
    3.将获取的内容写入字典(下一节讲解写入持久化存储)
    数据抓取实现思路:
    1.确定响应内容中存在所需数据:
    1.进入猫眼官网,选择top100;
    2.F12进入控制台,找到对应的div查看,如下:
    <a href="/films/57212" title="借东西的小人阿莉埃蒂" data-act="boarditem-click" data-val="{movieId:57212}">借东西的小人阿莉埃蒂</a>
    <p class="star">
    主演:志田未来,神木隆之介,大竹忍
    </p>
    <p class="releasetime">上映时间:2010-07-17(日本)</p>
    经过测试,响应内容中存在所需数据。
    2.寻找URL规律:
    第一页:https://maoyan.com/board/4?offset=0
    第二页:https://maoyan.com/board/4?offset=10
    第三页:https://maoyan.com/board/4?offset=20
    ...
    第n页:https://maoyan.com/board/4?offset=(n-1)*10
    3.确定正则表达式
    <div class="movie-item-info">.*?title="(.*?)".*?class="star">(.*?)</p>.*?releasetime">(.*?)</p>
    4.编码:面向对象编程
    
    代码实现:
    
    import re
    from urllib import request
    from time import sleep
    from random import randint
    class MaoYanTop100Spider(object):
    '''
    面向对象编程
    
    '''
    def __init__(self):
    self.__url = 'https://maoyan.com/board/4?offset={}'
    # 计数变量
    self.__i = 0
    
    @property
    def url(self):
    return self.__url
    
    @property
    def i(self):
    return self.__i
    
    #私有实例方法:获取对应html内容
    def __get_html(self,url):
    headers = { 'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'}
    req = request.Request(url=url,headers=headers)
    resp = request.urlopen(req)
    #返回获取的html内容
    html = resp.read().decode('utf-8')
    self.__parse_html(html)
    
    #私有实例方法:对获取的页面进行解析
    def __parse_html(self,html):
    re_bds = '<div class="movie-item-info">.*?title="(.*?)".*?class="star">(.*?)</p>.*?releasetime">(.*?)</p>'
    p = re.compile(re_bds, re.S)
    finall_list = p.findall(html)
    self.__save_html(finall_list)
    
    #私有实例方法:将解析得到的内容保存字典
    def __save_html(self,finall_list):
    items = {}
    for item in finall_list:
    items['name'] = item[0].strip()
    items['star'] = item[1].strip()
    items['time'] = item[2].strip()[5:15]
    print(items)
    self.__i += 1
    
    #公共接口
    def display(self):
    print('程序开始执行,即将爬取top100榜单信息,每10条将间隔三到五秒继续...')
    for i in range(0,91,10):
    url = self.__url.format(i)
    self.__get_html(url)
    sleep(randint(3,5))
    print('爬取数量:%d' % self.__i)
    
    def test():
    MaoYanTop100Spider().display()
    print('程序结束!')
    
    if __name__ == '__main__':
    test()
    
    ========================================================================
    
    得到的结果:
    
    anwc@anwc:~/文档/文档、代码杂七八$ python3 demo_spider_maoyan.py
    程序开始执行,即将爬取top100榜单信息,每10条将间隔三到五秒继续...
    {'name': '活着', 'star': '主演:葛优,巩俐,牛犇', 'time': '1994-05-17'}
    {'name': '钢琴家', 'star': '主演:艾德里安·布洛迪,艾米莉娅·福克斯,米哈乌·热布罗夫斯基', 'time': '2002-05-24'}
    {'name': '勇敢的心', 'star': '主演:梅尔·吉布森,苏菲·玛索,帕特里克·麦高汉', 'time': '1995-05-18'}
    {'name': '阿飞正传', 'star': '主演:张国荣,张曼玉,刘德华', 'time': '2018-06-25'}
    {'name': '射雕英雄传之东成西就', 'star': '主演:张国荣,梁朝伟,张学友', 'time': '1993-02-05'}
    {'name': '爱·回家', 'star': '主演:俞承豪,金艺芬,童孝熙', 'time': '2002-04-05'}
    {'name': '初恋这件小事', 'star': '主演:马里奥·毛瑞尔,平采娜·乐维瑟派布恩,阿查拉那·阿瑞亚卫考', 'time': '2012-06-05'}
    {'name': '泰坦尼克号', 'star': '主演:莱昂纳多·迪卡普里奥,凯特·温丝莱特,比利·赞恩', 'time': '1998-04-03'}
    {'name': '迁徙的鸟', 'star': '主演:雅克·贝汉,Philippe Labro', 'time': '2001-12-12'}
    {'name': '蝙蝠侠:黑暗骑士', 'star': '主演:克里斯蒂安·贝尔,希斯·莱杰,阿伦·伊克哈特', 'time': '2008-07-14'}
    {'name': '恐怖直播', 'star': '主演:河正宇,李璟荣,李大卫', 'time': '2013-07-31'}
    {'name': '我爱你', 'star': '主演:宋在浩,李顺才,尹秀晶', 'time': '2011-02-17'}
    {'name': '大闹天宫', 'star': '主演:邱岳峰,毕克,富润生', 'time': '1965-12-31'}
    {'name': '剪刀手爱德华', 'star': '主演:约翰尼·德普,薇诺娜·瑞德,黛安娜·威斯特', 'time': '1990-12-06'}
    {'name': '甜蜜蜜', 'star': '主演:黎明,张曼玉,杜可风', 'time': '2015-02-13'}
    {'name': '闻香识女人', 'star': '主演:阿尔·帕西诺,克里斯·奥唐纳,加布里埃尔·安瓦尔', 'time': '1992-12-23'}
    {'name': '英雄本色', 'star': '主演:狄龙,张国荣,周润发', 'time': '2017-11-17'}
    {'name': '三傻大闹宝莱坞', 'star': '主演:阿米尔·汗,黄渤,卡琳娜·卡普', 'time': '2011-12-08'}
    {'name': '黑客帝国3:矩阵革命', 'star': '主演:基努·里维斯,雨果·维文,凯瑞-安·莫斯', 'time': '2003-11-05'}
    {'name': '触不可及', 'star': '主演:弗朗索瓦·克鲁塞,奥玛·希,安娜·勒尼', 'time': '2011-11-02'}
    {'name': '忠犬八公物语', 'star': '主演:仲代达矢,春川真澄,井川比佐志', 'time': '1987-08-01'}
    {'name': '辩护人', 'star': '主演:宋康昊,郭度沅,吴达洙', 'time': '2013-12-18'}
    {'name': '喜剧之王', 'star': '主演:周星驰,莫文蔚,张柏芝', 'time': '1999-02-13'}
    {'name': '黄金三镖客', 'star': '主演:克林特·伊斯特伍德,李·范·克里夫,埃里·瓦拉赫 Eli Wallach', 'time': '1966-12-23'}
    {'name': '这个杀手不太冷', 'star': '主演:让·雷诺,加里·奥德曼,娜塔莉·波特曼', 'time': '1994-09-14'}
    {'name': '借东西的小人阿莉埃蒂', 'star': '主演:志田未来,神木隆之介,大竹忍', 'time': '2010-07-17'}
    {'name': '大话西游之月光宝盒', 'star': '主演:周星驰,莫文蔚,吴孟达', 'time': '2014-10-24'}
    {'name': '一一', 'star': '主演:吴念真,金燕玲,李凯莉', 'time': '2000-05-15'}
    {'name': '窃听风暴', 'star': '主演:乌尔里希·穆埃,塞巴斯蒂安·科赫,马蒂娜·格德克', 'time': '2006-03-23'}
    {'name': '楚门的世界', 'star': '主演:金·凯瑞,劳拉·琳妮,诺亚·艾默里奇', 'time': '1998(罗马尼亚)'}
    {'name': '飞屋环游记', 'star': '主演:爱德华·阿斯纳,乔丹·长井,鲍勃·彼德森', 'time': '2009-08-04'}
    {'name': '哈尔的移动城堡', 'star': '主演:倍赏千惠子,木村拓哉,美轮明宏', 'time': '2004-09-05'}
    {'name': '上帝之城', 'star': '主演:亚历桑德雷·罗德里格斯,艾莉丝·布拉加,莱安德鲁·菲尔米诺', 'time': '2002(俄罗斯)'}
    {'name': '美丽心灵', 'star': '主演:罗素·克洛,詹妮弗·康纳利,艾德·哈里斯', 'time': '2001-12-13'}
    {'name': '肖申克的救赎', 'star': '主演:蒂姆·罗宾斯,摩根·弗里曼,鲍勃·冈顿', 'time': '1994-09-10'}
    {'name': '美丽人生', 'star': '主演:罗伯托·贝尼尼,尼可莱塔·布拉斯基,乔治·坎塔里尼', 'time': '2020-01-03'}
    20000
    
    {'name': '倩女幽魂', 'star': '主演:张国荣,王祖贤,午马', 'time': '2011-04-30'}
    {'name': '搏击俱乐部', 'star': '主演:爱德华·哈里森·诺顿,布拉德·皮特,海伦娜·伯翰·卡特', 'time': '1999-09-10'}
    {'name': '春光乍泄', 'star': '主演:张国荣,梁朝伟,张震', 'time': '1997-05-17'}
    {'name': '海上钢琴师', 'star': '主演:蒂姆·罗斯,比尔·努恩,克兰伦斯·威廉姆斯三世', 'time': '2019-11-15'}
    {'name': '新龙门客栈', 'star': '主演:张曼玉,梁家辉,甄子丹', 'time': '2012-02-24'}
    {'name': '驯龙高手', 'star': '主演:杰伊·巴鲁切尔,杰拉德·巴特勒,亚美莉卡·费雷拉', 'time': '2010-05-14'}
    {'name': '教父2', 'star': '主演:阿尔·帕西诺,罗伯特·德尼罗,黛安·基顿', 'time': '1974-12-12'}
    {'name': '美国往事', 'star': '主演:罗伯特·德尼罗,詹姆斯·伍兹,伊丽莎白·麦戈文', 'time': '2015-04-23'}
    {'name': '魂断蓝桥', 'star': '主演:费雯·丽,罗伯特·泰勒,露塞尔·沃特森', 'time': '1940-05-17'}
    {'name': '狮子王', 'star': '主演:马修·布罗德里克,尼基塔·卡兰姆,詹姆斯·厄尔·琼斯', 'time': '1995-07-15'}
    {'name': '疯狂原始人', 'star': '主演:尼古拉斯·凯奇,艾玛·斯通,瑞安·雷诺兹', 'time': '2013-04-20'}
    {'name': '唐伯虎点秋香', 'star': '主演:周星驰,巩俐,郑佩佩', 'time': '1993-07-01'}
    {'name': '速度与激情5', 'star': '主演:范·迪塞尔,保罗·沃克,道恩·强森', 'time': '2011-05-12'}
    {'name': 'V字仇杀队', 'star': '主演:娜塔莉·波特曼,雨果·维文,斯蒂芬·瑞', 'time': '2005-12-11'}
    {'name': '龙猫', 'star': '主演:秦岚,糸井重里,岛本须美', 'time': '2018-12-14'}
    {'name': '本杰明·巴顿奇事', 'star': '主演:布拉德·皮特,凯特·布兰切特,塔拉吉·P·汉森', 'time': '2008-12-25'}
    {'name': '指环王2:双塔奇兵', 'star': '主演:伊莱贾·伍德,伊恩·麦克莱恩,丽芙·泰勒', 'time': '2003-04-25'}
    {'name': '指环王1:护戒使者', 'star': '主演:伊莱贾·伍德,伊恩·麦克莱恩,丽芙·泰勒', 'time': '2002-04-04'}
    {'name': '时空恋旅人', 'star': '主演:瑞秋·麦克亚当斯,多姆纳尔·格里森,比尔·奈伊', 'time': '2013-09-04'}
    {'name': '末代皇帝', 'star': '主演:尊龙,陈冲,彼得·奥图尔', 'time': '1987-10-23'}
    {'name': '天空之城', 'star': '主演:寺田农,鹫尾真知子,龟山助清', 'time': '1992-05-01'}
    {'name': '风之谷', 'star': '主演:岛本须美,永井一郎,坂本千夏', 'time': '1992-05'}
    {'name': '幽灵公主', 'star': '主演:松田洋治,石田百合子,田中裕子', 'time': '1998-05-01'}
    {'name': '蝙蝠侠:黑暗骑士崛起', 'star': '主演:克里斯蒂安·贝尔,迈克尔·凯恩,加里·奥德曼', 'time': '2012-08-27'}
    {'name': '十二怒汉', 'star': '主演:亨利·方达,李·科布,马丁·鲍尔萨姆', 'time': '1957-04-13'}
    {'name': '素媛', 'star': '主演:李来,薛耿求,严志媛', 'time': '2013-10-02'}
    {'name': '大话西游之大圣娶亲', 'star': '主演:周星驰,朱茵,莫文蔚', 'time': '2014-10-24'}
    {'name': '教父', 'star': '主演:马龙·白兰度,阿尔·帕西诺,詹姆斯·肯恩', 'time': '2015-04-18'}
    {'name': '海洋', 'star': '主演:雅克·贝汉,姜文,兰斯洛特·佩林', 'time': '2011-08-12'}
    {'name': '黑客帝国', 'star': '主演:基努·里维斯,凯瑞-安·莫斯,劳伦斯·菲什伯恩', 'time': '2000-01-14'}
    {'name': '鬼子来了', 'star': '主演:姜文,姜宏波,陈强', 'time': '2000-05-13'}
    {'name': '哈利·波特与死亡圣器(下)', 'star': '主演:丹尼尔·雷德克里夫,鲁伯特·格林特,艾玛·沃特森', 'time': '2011-08-04'}
    {'name': '辛德勒的名单', 'star': '主演:连姆·尼森,拉尔夫·费因斯,本·金斯利', 'time': '1993-11-30'}
    {'name': '指环王3:王者无敌', 'star': '主演:伊莱贾·伍德,伊恩·麦克莱恩,丽芙·泰勒', 'time': '2004-03-15'}
    {'name': '7号房的礼物', 'star': '主演:柳承龙,郑镇荣,朴信惠', 'time': '2013-01-23'}
    {'name': '盗梦空间', 'star': '主演:莱昂纳多·迪卡普里奥,渡边谦,约瑟夫·高登-莱维特', 'time': '2010-09-01'}
    {'name': '加勒比海盗', 'star': '主演:约翰尼·德普,凯拉·奈特莉,奥兰多·布鲁姆', 'time': '2003-11-21'}
    {'name': '当幸福来敲门', 'star': '主演:威尔·史密斯,贾登·史密斯,坦迪·牛顿', 'time': '2008-01-17'}
    {'name': '穿条纹睡衣的男孩', 'star': '主演:阿沙·巴特菲尔德,维拉·法梅加,大卫·休里斯', 'time': '2008-08-28'}
    {'name': '音乐之声', 'star': '主演:朱莉·安德鲁斯,克里斯托弗·普卢默,埃琳诺·帕克', 'time': '1965-03-02'}
    {'name': '无间道', 'star': '主演:刘德华,梁朝伟,黄秋生', 'time': '2003-09-05'}
    {'name': '致命魔术', 'star': '主演:休·杰克曼,克里斯蒂安·贝尔,迈克尔·凯恩', 'time': '2006-10-17'}
    {'name': '小鞋子', 'star': '主演:默罕默德·阿米尔·纳吉,Kamal Mirkarimi,Behzad Rafi', 'time': '1997(伊朗)'}
    {'name': '萤火之森', 'star': '主演:内山昂辉,佐仓绫音,后藤弘树', 'time': '2011-09-17'}
    {'name': '少年派的奇幻漂流', 'star': '主演:苏拉·沙玛,伊尔凡·可汗,塔布', 'time': '2012-11-22'}
    {'name': '断背山', 'star': '主演:希斯·莱杰,杰克·吉伦哈尔,米歇尔·威廉姆斯', 'time': '2005-09-02'}
    {'name': '罗马假日', 'star': '主演:格利高里·派克,奥黛丽·赫本,埃迪·艾伯特', 'time': '1953-08-20'}
    {'name': '夜访吸血鬼', 'star': '主演:汤姆·克鲁斯,布拉德·皮特,克尔斯滕·邓斯特', 'time': '1994-11-11'}
    {'name': '天堂电影院', 'star': '主演:菲利浦·诺瓦雷,赛尔乔·卡斯特利托,蒂兹亚娜·罗达托', 'time': '1988-11-17'}
    {'name': '怦然心动', 'star': '主演:玛德琳·卡罗尔,卡兰·麦克奥利菲,艾丹·奎因', 'time': '2010-07-26'}
    {'name': '乱世佳人', 'star': '主演:费雯·丽,克拉克·盖博,奥利维娅·德哈维兰', 'time': '1939-12-15'}
    {'name': '完美的世界', 'star': '主演:凯文·科斯特纳,克林特·伊斯特伍德,T·J·劳瑟', 'time': '1993-11-24'}
    {'name': '霸王别姬', 'star': '主演:张国荣,张丰毅,巩俐', 'time': '1993-07-26'}
    {'name': '七武士', 'star': '主演:三船敏郎,志村乔,千秋实', 'time': '1954-04-26'}
    {'name': '忠犬八公的故事', 'star': '主演:Forest,理查·基尔,琼·艾伦', 'time': '2009-06-13'}
    {'name': '海豚湾', 'star': '主演:里克·奥巴瑞,路易·西霍尤斯,哈迪·琼斯', 'time': '2009-07-31'}
    {'name': '拯救大兵瑞恩', 'star': '主演:汤姆·汉克斯,马特·达蒙,汤姆·塞兹摩尔', 'time': '1998-11-13'}
    {'name': '机器人总动员', 'star': '主演:本·贝尔特,艾丽莎·奈特,杰夫·格尔林', 'time': '2008-06-27'}
    {'name': '神偷奶爸', 'star': '主演:史蒂夫·卡瑞尔,杰森·席格尔,拉塞尔·布兰德', 'time': '2010-06-20'}
    {'name': '放牛班的春天', 'star': '主演:热拉尔·朱尼奥,让-巴蒂斯特·莫尼耶,玛丽·布奈尔', 'time': '2004-10-16'}
    {'name': '熔炉', 'star': '主演:孔刘,郑有美,金智英', 'time': '2011-09-22'}
    {'name': '阿凡达', 'star': '主演:萨姆·沃辛顿,佐伊·索尔达娜,米歇尔·罗德里格兹', 'time': '2010-01-04'}
    {'name': '千与千寻', 'star': '主演:柊瑠美,周冬雨,入野自由', 'time': '2019-06-21'}
    {'name': '无敌破坏王', 'star': '主演:约翰·C·赖利,萨拉·西尔弗曼,简·林奇', 'time': '2012-11-06'}
    爬取数量:100
    程序结束!
    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: