700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Python爬虫实训案例之爬取豆瓣电影Top250并保存至excel

Python爬虫实训案例之爬取豆瓣电影Top250并保存至excel

时间:2021-10-12 08:19:15

相关推荐

Python爬虫实训案例之爬取豆瓣电影Top250并保存至excel

1)先确定爬取的方式

在页面点击右键,查看源码,是否有我们想要获取的数据。

有数据,则后续我们可以采用xpath的方式进行解析。

不是通过异步加载的话,url和请求都确定了

url:/top250请求方式:get

2)爬取豆瓣250第一页所有的图片

通过xpath来获取img元素

通过在图片上右击 -> 检查 ; 或者通过开发者工具的选择元素选中图片标签。

手动获取xpath://div[contains(@class, “pic”)]//img/@src

自动获取:在Elements将对应标签右击,点击 copy xpath 或 copy Full xpath

import osimport requestsfrom lxml import etreeurl = '/top250'headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) ''Chrome/90.0.4430.212 Safari/537.36 '}def main():# 获取源码文件html = requests.get(url, headers=headers).text# 解析htmlhtml = etree.HTML(html)img_urls = html.xpath('//*[@id="content"]/div/div[1]/ol/li/div/div[1]/a/img/@src')# 获取图片if not os.path.exists('./豆瓣电影图片'):os.mkdir('./豆瓣电影图片')for item in img_urls:# 获取图片内容content = requests.get(item, headers=headers).content# 获取图片名称fn = item.split('/')[-1]print(fn)with open('./豆瓣电影图片/' + fn, 'wb') as f:f.write(content)if __name__ == '__main__':main()

运行结果:

3)爬取豆瓣250第一页电影的信息

需求:获取每一页中电影的信息,包括电影名、主创、评分、简评

Code:

输出结果:

4)爬取豆瓣250所有电影信息

第一页: /top250?start=0&filter=

第二页:/top250?start=25&filter=

Code:

运行时报错:

报错原因:xpath在返回解析的结果时,如果获取不到内容,则返回一个空列表,在豆瓣250电影列表中,有些电影是没有简介的

解决方法:为inq添加判断

Code:

输出结果:

5)将内容保存到excel表格中

可以使用两个模块:openpyxl 或者 xlwt

固定步骤

import xlwt# 创建一个excel工作簿book = xlwt.Workbook(encoding='utf-8')# 为工作簿添加sheetsheet = book.add_sheet('豆瓣top250')# 写表头sheet.write(0, 0, '排名')sheet.write(0, 1, '名称')sheet.write(0, 2, '评分')sheet.write(0, 3, '简介')sheet.write(0, 4, '主创')# 保存文件book.save(u'豆瓣Top250.xlsx')

总的代码:

import xlwtimport requestsfrom lxml import etreeurl = '/top250'headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) ''Chrome/90.0.4430.212 Safari/537.36 '}def main(num):# 获取源码文件html = requests.get(url + f'?start={str(num * 25)}&filter=', headers=headers).text# 解析htmlhtml = etree.HTML(html)# 获取电影标签列表movies = html.xpath('//ol[contains(@class,"grid_view")]/li')# print(len(movies), movies)# 遍历列表,取出信息for item in movies:title = item.xpath('.//span[contains(@class,"title")][1]/text()')[0]author = item.xpath('./div/div[2]/div[2]/p[1]/text()')[0].strip()score = item.xpath('.//span[contains(@class,"rating_num")][1]/text()')[0]index = item.xpath('./div/div[1]/em/text()')[0]inq = item.xpath('.//span[contains(@class, "inq")]/text()')# 处理简介为空的问题inq = '' if not inq else inq[0]print(f'电影名:{title} | 评分:{score} | 排名:{index} | 简介:{inq} | 主创{author} ')# 函数中使用全局变量global nsheet.write(n, 0, index)sheet.write(n, 1, title)sheet.write(n, 2, score)sheet.write(n, 3, inq)sheet.write(n, 4, author)n += 1if __name__ == '__main__':# 创建一个excel工作簿book = xlwt.Workbook(encoding='utf-8')# 为工作簿添加sheetsheet = book.add_sheet('豆瓣top250')# 全局变量n = 1# 写表头sheet.write(0, 0, '排名')sheet.write(0, 1, '名称')sheet.write(0, 2, '评分')sheet.write(0, 3, '简介')sheet.write(0, 4, '主创')for i in range(10):main(i)# 保存文件book.save(u'豆瓣Top250.xls')

输出结果:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。