简单上手Python爬虫实战:豆瓣top250电影数据爬取

        这里所用到的知识点有request库和xpath用法,同时也需要一点点的python基础,如果有没有学的小伙伴建议学完后再来跟着欧来一起实战项目哦!

1 数据的选择

        这里我们打开豆瓣网页,进入豆瓣top250电影评分页面,接下来我们对数据的操作都是在这个页面上进行的。

2 数据的爬取

        右击页面,单击检查,对页面进行抓包,获取所需要的url和UA。

        同时我们对不同页面的链接分析,我们发现"https://movie.douban.com/top250?start={}&filter="中不同页面的链接,也就是将start=后面的数值依次往后推25,我们想要获取所有电影的数据,也就是说对start=的值进行修改,一共10个url,用代码表示,如下所示。

 for k in range(0, 250, 25):
     url = 'https://movie.douban.com/top250?start={}&filter='.format(k)
     headers = {
            'User-Agent': '......'
        }
     re = requests.get(url, headers=headers).text

        对肖申克的救赎进行抓包,我们发现网页将电影的信息全部放在li下面。

        我们复制xpath地址,将ol下面的所有的li获取到list_li列表里面。

re = requests.get(url, headers=headers).text
tree = etree.HTML(re)
list_li = tree.xpath('//*[@id="content"]/div/div[1]/ol/li')

        我们先定位我们所需要的数据。

        通过获取xpath地址,我们先获取电影名称,并存放在s列表中。

        for i in list_li:
            s = []
            Movie_Name = str(i.xpath('./div/div[1]/a/img/@alt'))[2:-2]

        在获取导演和演员信息时,我们将空格删除,同时以\xa0切割成列表,再获取数据,代码如下。

            x = str(i.xpath('./div/div[2]/div[2]/p[1]/text()[1]')).replace(' ', '')[4:-2]
            t = [part.strip() for part in x.split('\\xa0')]
            Director = t[0][3:]
            Actor = t[-1][3:]

        获取年份、国家和电影类别时同上操作,代码如下。

            x1 = str(i.xpath('./div/div[2]/div[2]/p[1]/text()[2]')).replace(' ', '')[4:-4]
            t = [part.strip() for part in x1.split('\\xa0')]
            Year = t[0]
            s.append(Year)
            Country = t[2]
            s.append(Country)
            Categories = t[-1]
            s.append(Categories)

        最后获取评分,代码如下。

            Scoring = str(i.xpath('./div/div[2]/div[2]/div/span[2]/text()'))[2:-2]
            s.append(Scoring)

        输出处理好的数据。

3 数据的保存

        创建豆瓣top250评分数据.csv文件,通过csv库对其进行写操作,我们先将标签输入进去。

    f = open('豆瓣top250评分数据.csv', 'a+', encoding='utf-8', newline='')
    csv_writer = csv.writer(f)
    csv_writer.writerow(['Movie_Name', 'Director', 'Actor', 'Year', 'Country', 'Categories', 'Scoring'])

        然后对每一个电影的数据s列表进行写操作。

csv_writer.writerow(s)

        最后关闭f。

    f.close()

        最后运行代码,打开csv文件。

        到这里,我们本次实战就全部结束了,希望对大家有所帮助。

4 完整代码

import csv

import requests
from lxml import etree

if __name__ == '__main__':
    f = open('豆瓣top250评分数据.csv', 'a+', encoding='utf-8', newline='')
    csv_writer = csv.writer(f)
    csv_writer.writerow(['Movie_Name', 'Director', 'Actor', 'Year', 'Country', 'Categories', 'Scoring'])
    for k in range(0, 250, 25):
        url = 'https://movie.douban.com/top250?start={}&filter='.format(k)
        headers = {
            'User-Agent': '......'
        }
        re = requests.get(url, headers=headers).text
        tree = etree.HTML(re)
        list_li = tree.xpath('//*[@id="content"]/div/div[1]/ol/li')
        for i in list_li:
            s = []
            Movie_Name = str(i.xpath('./div/div[1]/a/img/@alt'))[2:-2]
            x = str(i.xpath('./div/div[2]/div[2]/p[1]/text()[1]')).replace(' ', '')[4:-2]
            t = [part.strip() for part in x.split('\\xa0')]
            Director = t[0][3:]
            Actor = t[-1][3:]
            s.append(Movie_Name)
            s.append(Director)
            s.append(Actor)
            x1 = str(i.xpath('./div/div[2]/div[2]/p[1]/text()[2]')).replace(' ', '')[4:-4]
            t = [part.strip() for part in x1.split('\\xa0')]
            Year = t[0]
            s.append(Year)
            Country = t[2]
            s.append(Country)
            Categories = t[-1]
            s.append(Categories)
            Scoring = str(i.xpath('./div/div[2]/div[2]/div/span[2]/text()'))[2:-2]
            s.append(Scoring)
            csv_writer.writerow(s)
    f.close()

  • 25
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值