Python 3爬虫小实战(一)—— 豆瓣电影Top250

2019-07-14 00:26发布

要爬取内容的是豆瓣网的电影排行top250: https://movie.douban.com/top250, 将电影名和评分爬取下来并输出, 如下图: 肖申克的救赎 导演:弗兰克·德拉邦特FrankDarabont 主演:蒂姆·罗宾斯TimRobbins/... 9.6 1994 美国 犯罪剧情 884501人评价 霸王别姬 导演:陈凯歌KaigeChen 主演:张国荣LeslieCheung/张丰毅FengyiZha... 9.6 1993 中国大陆香港 剧情爱情同性 884501人评价 这个杀手不太冷 导演:吕克·贝松LucBesson 主演:让·雷诺JeanReno/娜塔莉·波特曼... 9.6 1994 法国 剧情动作犯罪 884501人评价 阿甘正传 导演:RobertZemeckis 主演:TomHanks/RobinWrightPenn/GarySinise 9.6 1994 美国 剧情爱情 884501人评价 美丽人生 导演:罗伯托·贝尼尼RobertoBenigni 主演:罗伯托·贝尼尼RobertoBeni... 9.6 1997 意大利 剧情喜剧爱情战争 884501人评价 ...... 首先分析要爬取的url, 发现每个页面有25条内容, 总共有十页, 第一页的URL为https://movie.douban.com/top250?start=0&filter=
第二页的url为https://movie.douban.com/top250?start=25&filter=
第三页第四页也是类似的URL, 只是修改了start后面的数字, 第一页是0, 往后每增加25, 所以url的格式为’https://movie.douban.com/top250?start={}&filter=’format(i*25) 然后分析如何爬取内容:
首先爬取标题:
查看源代码后, 发现标题是放在这样的代码中: <div class="info"> <div class="hd"> <a href="https://movie.douban.com/subject/1292052/" class=""> <span class="title">肖申克的救赎span> <span class="title"> / The Shawshank Redemptionspan> <span class="other"> / 月黑高飞(港) / 刺激1995(台)span> a> <span class="playable">[可播放]span> div> <div class="bd"> <p class=""> 导演: 弗兰克·德拉邦特 Frank Darabont   主演: 蒂姆·罗宾斯 Tim Robbins /... <br> 1994 / 美国 / 犯罪 剧情 p> <div class="star"> <span class="rating5-t">span> <span class="rating_num" property="v:average">9.6span> <span property="v:best" content="10.0">span> <span>884501人评价span> div> 可以很清楚的看到电影的标题存放的位置大概是 <span class="title">电影名称span> 在这里我们需要对lxml模块中的某些方法做些说明
我们这里用lxml库和XPath语法来帮助我们完成信息的提取。 XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历,我们用来提取格式为HTML的网页源码效率也相当高,可以遍历html的各个标签和属性,来定位到我们需要的信息的位置,并提取。
这里写图片描述
这里我们可以用一个for 循环把我们需要的信息提取出来。
首先定位到包含电影名称,导演等的模块,在这之前,我们用html库中的fromstring方法把网页中的节点和地址信息获取。 sel = html.fromstring(r) 然后进入使用xpath把模块提取出来
豆瓣中电影信息处于模块中 for i in sel.xpath('//div[@class="info"]'): 在根据模块中名称,导演等放置的内模块具体提取
比如电影名称 title = i.xpath('div[@class="hd"]/a/span[@class="title"]/text()')[0] 由于电影名称是该模块中的第一个文本,后面的文本内容是我们不需要的,所以只要索引为[0]的内容
后面依次把所有的内容提取出来,然后打印就可以啦。
效果是这样的 肖申克的救赎 导演:弗兰克·德拉邦特FrankDarabont 主演:蒂姆·罗宾斯TimRobbins/... 9.6 1994 美国 犯罪剧情 886912人评价 霸王别姬 导演:陈凯歌KaigeChen 主演:张国荣LeslieCheung/张丰毅FengyiZha... 9.6 1993 中国大陆香港 剧情爱情同性 886912人评价 这个杀手不太冷 导演:吕克·贝松LucBesson 主演:让·雷诺JeanReno/娜塔莉·波特曼... 9.6 1994 法国 剧情动作犯罪 886912人评价 阿甘正传 导演:RobertZemeckis 主演:TomHanks/RobinWrightPenn/GarySinise 9.6 1994 美国 剧情爱情 886912人评价 美丽人生 导演:罗伯托·贝尼尼RobertoBenigni 主演:罗伯托·贝尼尼RobertoBeni... 9.6 1997 意大利 剧情喜剧爱情战争 886912人评价 千与千寻 导演:宫崎骏HayaoMiyazaki 主演:柊瑠美RumiHîragi/入野自由Miy... 9.6 2001 日本 剧情动画奇幻 886912人评价 辛德勒的名单 导演:史蒂文·斯皮尔伯格StevenSpielberg 主演:连姆·尼森LiamNeeson... 9.6 1993 美国 剧情历史战争 886912人评价 泰坦尼克号 导演:詹姆斯·卡梅隆JamesCameron 主演:莱昂纳多·迪卡普里奥Leonardo... 9.6 1997 美国 剧情爱情灾难 886912人评价 盗梦空间 导演:克里斯托弗·诺兰ChristopherNolan 主演:莱昂纳多·迪卡普里奥Le... 9.6 2010 美国英国 剧情动作科幻悬疑冒险 886912人评价 机器人总动员 导演:安德鲁·斯坦顿AndrewStanton 主演:本·贝尔特BenBurtt/艾丽... 9.6 2008 美国 喜剧爱情科幻动画冒险 886912人评价 海上钢琴师 导演:朱塞佩·托纳多雷GiuseppeTornatore 主演:蒂姆·罗斯TimRoth/... 9.6 1998 意大利 剧情音乐 886912人评价 三傻大闹宝莱坞 导演:拉库马·希拉尼RajkumarHirani 主演:阿米尔·汗AamirKhan/卡... 9.6 2009 印度 剧情喜剧爱情歌舞 886912人评价 忠犬八公的故事 导演:莱塞·霍尔斯道姆LasseHallström 主演:理查·基尔RichardGer... 9.6 2009 美国英国 剧情 886912人评价 放牛班的春天 导演:克里斯托夫·巴拉蒂ChristopheBarratier 主演:杰拉尔·朱诺Géra... 9.6 2004 法国瑞士德国 剧情音乐 886912人评价 大话西游之大圣娶亲 导演:刘镇伟JeffreyLau 主演:周星驰StephenChow/吴孟达ManTatNg... 9.6 1995 香港中国大陆 动作冒险喜剧奇幻爱情 886912人评价 龙猫 导演:宫崎骏HayaoMiyazaki 主演:日高法子NorikoHidaka/坂本千夏Ch... 9.6 1988 日本 儿童动画奇幻家庭 886912人评价 教父 导演:弗朗西斯·福特·科波拉FrancisFordCoppola 主演:马龙·白兰度M... 9.6 1972 美国 剧情犯罪 886912人评价 楚门的世界 导演:彼得·威尔PeterWeir 主演:金·凯瑞JimCarrey/劳拉·琳妮Lau... 9.6 1998 美国 剧情科幻 886912人评价 乱世佳人 导演:维克多·弗莱明VictorFleming/乔治·库克GeorgeCukor 主演:托... 9.6 1939 美国 剧情历史爱情战争 886912人评价 天堂电影院 导演:朱塞佩·托纳多雷GiuseppeTornatore 主演:安东娜拉·塔莉Antonel... 9.6 1988 意大利法国 剧情爱情 886912人评价 触不可及 导演:奥利维·那卡什OlivierNakache/艾力克·托兰达EricToledano 主... 9.6 2011 法国 剧情喜剧 886912人评价 当幸福来敲门 导演:加布里尔·穆奇诺GabrieleMuccino 主演:威尔·史密斯WillSmith... 9.6 2006 美国 剧情传记家庭 886912人评价 熔炉 导演:黄东赫Dong-hyukHwang 主演:孔侑YooGong/郑有美Yu-miJeong... 9.6 2011 韩国 剧情 886912人评价 无间道 导演:刘伟强/麦兆辉 主演:刘德华/梁朝伟/黄秋生 9.6 2002 香港 剧情犯罪悬疑 886912人评价 搏击俱乐部 导演:大卫·芬奇DavidFincher 主演:爱德华·诺顿EdwardNorton/布拉... 9.6 1999 美国德国 剧情动作悬疑惊悚 886912人评价 十二怒汉 导演:SidneyLumet 主演:亨利·方达HenryFonda/马丁·鲍尔萨姆Marti... 9.4 1957 美国 剧情 173189人评价 怦然心动 导演:罗伯·莱纳RobReiner 主演:玛德琳·卡罗尔MadelineCarroll/卡... 9.4 2010 美国 剧情喜剧爱情 173189人评价 星际穿越 导演:克里斯托弗·诺兰ChristopherNolan 主演:马修·麦康纳MatthewMc... 9.4 2014 美国英国加拿大冰岛 剧情科幻冒险 173189人评价 指环王3:王者无敌 导演:彼得·杰克逊PeterJackson 主演:维果·莫腾森ViggoMortensen/... 9.4 2003 美国新西兰 剧情动作奇幻冒险 173189人评价 少年派的奇幻漂流 导演:李安AngLee 主演:苏拉·沙玛SurajSharma/拉菲·斯波RafeSpa... 9.4 2012 美国台湾英国加拿大 剧情奇幻冒险 173189人评价 ...... 完整代码如下: import requests from lxml import html for i in range(10): url = 'https://movie.douban.com/top250?start={}&filter='.format(i*25) con = requests.get(url) r = con.content sel = html.fromstring(r) for i in sel.xpath('//div[@class="info"]'): title = i.xpath('div[@class="hd"]/a/span[@class="title"]/text()')[0] info = i.xpath('div[@class="bd"]/p[1]/text()') info_1 = info[0].replace(" ", "").replace(" ", "") date = info[1].replace(" ", "").replace(" ", "").split("/")[0] country = info[1].replace(" ", "").replace(" ", "").split("/")[1] geners = info[1].replace(" ", "").replace(" ", "").split("/")[2] rate = i.xpath('//span[@class="rating_num"]/text()')[0] comCount = i.xpath('//div[@class="star"]/span[4]/text()')[0] print(title,info_1,rate,date,country,geners,comCount)