笔记整理——Python爬虫(三):基本概念及常用基本方法
2020-06-02 05:45
459 查看
笔记整理——Python爬虫(三):基本概念及常用基本方法
一、爬虫基本概念
定义
网络蜘蛛、网络机器人,抓取网络数据的程序 其实就是用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() '霸王别姬 大话西游 '.replace(' ',' ') 结果: '霸王别姬 大话西游' 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 程序结束!
相关文章推荐
- 优秀课件笔记之经营决策常用的成本概念及基本方法
- Python爬虫笔记1-基本概念
- 学习python笔记——基本概念
- 【数据挖掘概念与技术】学习笔记6-挖掘频繁模式、关联和相关性:基本概念和方法(编缉中)
- 【深入分析JAVA多线程】(2)Java多线程基本概念和常用方法分析
- 调用、方法-Android的一些基本概念小整理(一)-by小雨
- 收藏整理的一些Python常用方法和技巧
- Python 基本语法笔记整理
- 【笔记】常用 API的基本知识以及常用方法
- FusionCharts JavaScript API - Functions 常用方法整理笔记
- IOS学习笔记(十)之UIImageView图片视图的基本概念和使用方法
- [Objective-C]OC中字典基本概念和常用方法
- A Byte of Python 笔记(2)基本概念:数、字符串、转义符、变量、标识符命名、数据类型、对象
- 网络爬虫学习笔记——GET方法下几种常用情况
- 密码学笔记1-基本概念和常用加密算法
- python笔记(一)常用数据类型和方法
- Python学习笔记 —— 数字类型【Numbers】及常用方法
- 【Objective-C】OC中字符串(NSString)的基本概念和常用处理方法
- python学习笔记【一】--基本概念
- Python 学习笔记(2) - 基本概念、运算符与表达式