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

来源:互联网 发布:java中service的作用 编辑:程序博客网 时间:2024/06/07 02:37

要爬取内容的是豆瓣网的电影排行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">&nbsp;/&nbsp;The Shawshank Redemption</span>                                <span class="other">&nbsp;/&nbsp;月黑高飞(港)  /  刺激1995(台)</span>                        </a>                            <span class="playable">[可播放]</span>                    </div>                    <div class="bd">                        <p class="">                            导演: 弗兰克·德拉邦特 Frank Darabont&nbsp;&nbsp;&nbsp;主演: 蒂姆·罗宾斯 Tim Robbins /...<br>                            1994&nbsp;/&nbsp;美国&nbsp;/&nbsp;犯罪 剧情                        </p>                        <div class="star">                                <span class="rating5-t"></span>                                <span class="rating_num" property="v:average">9.6</span>                                <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 requestsfrom lxml import htmlfor 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("\n", "")        date = info[1].replace(" ", "").replace("\n", "").split("/")[0]        country = info[1].replace(" ", "").replace("\n", "").split("/")[1]        geners = info[1].replace(" ", "").replace("\n", "").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)
原创粉丝点击