爬虫入门-爬取豆瓣top250电影-task01

刚刚接触Python,简单地学习了一下基础后,利用xpath爬取一下豆瓣top250电影作为练习。


一.先来到豆瓣top250电影界面

爬虫入门-爬取豆瓣top250电影-task01_第1张图片

二.F12打开发者工具,提取影片的xpath信息

电影名的xpath为:

//*[@id=“content”]/div/div[1]/ol/li[1]/div/div[2]/div[1]/a/span[1]

电影评分的xpath为:

//*[@id=“content”]/div/div[1]/ol/li[1]/div/div[2]/div[2]/div/span[2]

电影链接的xpath为:

//*[@id=“content”]/div/div[1]/ol/li[1]/div/div[2]/div[1]/a

再来看看整部电影框架的xpath:

//*[@id=“content”]/div/div[1]/ol/li[1]

爬虫入门-爬取豆瓣top250电影-task01_第2张图片
比较前三个和最后一个,发现前一部分都是

*[@id=“content”]/div/div[1]/ol/li[1]

所以爬取的时候就可以这样写了:
爬虫入门-爬取豆瓣top250电影-task01_第3张图片

三.写代码爬取

from lxml import html
import requests
import xlwt
etree = html.etree

#伪装成浏览器访问
headers = {"User-Agent":
               "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.87 Safari/537.36"}
allList = []
none = "没有简介"
for i in range(10):
    url = 'https://movie.douban.com/top250?start={}'.format(i*25)
    text = requests.get(url, headers=headers).text
    result = etree.HTML(text)  # etree.HTML():构造了一个XPath解析对象并对HTML文本进行自动修正。
    movie = result.xpath('//*[@id="content"]/div/div[1]/ol/li') 
    for div in movie:
        try:
            movieName = div.xpath('./div/div[2]/div[1]/a/span[1]/text()')[0] ##名字
            movieScore = div.xpath('./div/div[2]/div[2]/div/span[2]/text()')[0] ##评分
            movieUrl = div.xpath('./div/div[2]/div[1]/a/@href')[0] ##获取链接用@href
            movieResume = div.xpath('./div/div[2]/div[2]/p[2]/span/text()')[0]  ##简介
            totalComment = div.xpath('./div/div[2]/div[2]/div/span[4]/text()')[0] ##总评价数
            imageUrl = div.xpath('./div/div[1]/a/img/@src')[0] ##电影封面
            # print("{0} {1} {2} {3} {4} {5}".format(movieName, movieScore, movieUrl, movieResume, totalComment, imageUrl))
            list = [movieName, movieScore, movieUrl, movieResume, totalComment, imageUrl]
            allList.append(list)
        except IndexError:
            # print("{0} {1} {2} {3} {4}".format(movieName, movieScore, movieUrl, totalComment, imageUrl))
            list = [movieName, movieScore, movieUrl, none, totalComment, imageUrl]
            allList.append(list)

#存到Excel里
row0 = ['电影名称', '电影评分', '电影链接', '电影简介', '电影总评价数', '电影封面']
book = xlwt.Workbook(encoding='utf-8')#创建excel,设置编码
sheet = book.add_sheet('爬取结果', cell_overwrite_ok=True) #创建表名,cell_overwrite_ok=True很重要,用于确认同一个cell单元是否可以重设值
for row in range(len(row0)):
    sheet.write(0,row,row0[row]) #把表头写进去 write方法三个参数分别为行,列,数据

i = 1 #从第一行开始写入数据

for list in allList:
    j = 0
    for data in list:
        sheet.write(i,j,data)
        j += 1
    i += 1
book.save('top250.xls')

需要特别注意的是有电影并没有简介,如果不加try except会报错:
爬虫入门-爬取豆瓣top250电影-task01_第4张图片
我将数据写入到了excel中,表格如下:
爬虫入门-爬取豆瓣top250电影-task01_第5张图片

你可能感兴趣的:(爬虫)