爬虫经典案例 | 爬取豆瓣top250
一、页面分析
1.1 单页分析
目标url:https://movie.douban.com/top250?start=0&filter=
本次的爬取目标主要是:标题、评分、评价人数、引言、电影链接
由于该网页为静态网页,所以上手的难度也大大减少。
进入开发者工具 寻找我们要爬取的数据所在位置(由于是静态的网页所以直接f12在Elements找)
1、电影名称(标题)
2、评分
3、评价人数
4、引言
5、电影链接
找到了对应的数据所在位置后就可以用xpath工具来确定一下他们的起始位置
通过工具可以发现一共有25个搜索结果,对应的也就是一个页面的25部电影的信息。所以我们在写代码的时候就可以以这个路径为基础路径从而进一步的查找我们要找到的信息
1、电影名称解析
//div[@class="info"]/div[@class="hd"]/a/span/text()
2、评分解析
//div[@class="info"]/div[@class="bd"]/div[@class="star"]/span[@class="rating_num"]/text()
3、评价人数解析
//div[@class="info"]/div[@class="bd"]/div[@class="star"]/span[last()]/text()
注:评价人数由于没有class属性定位不到这条数据,所以就用了last()就可以直接定位到span里的最后一条数据。
4、引言解析
//div[@class="info"]/div[@class="bd"]/p[@class="quote"]/span/text()
引言这块有个小坑,就是有些电影会没有引言,如果所有的引言都按照这个格式写就会出现报错,所以我们需要添加一个判断来跳过这个坑
# 如果有引言就写引言,没有就不写
if quote:quote = quote[0]
else:quote = ''
5、电影链接解析
//div[@class="info"]/div[@class="hd"]/a/@href/text()
1.2 翻页分析
翻页是为了让我们除了能爬第一页之外,还可以把我们想爬的页数都爬出来。我们首先先来分析一下url的差别
# 第一页
https://movie.douban.com/top250?start=0&filter=
# 第二页
https://movie.douban.com/top250?start=25&filter=
# 第三页
https://movie.douban.com/top250?start=50&filter=
通过观察不难发现三个网址不同的地方在start值,并且分别是以25 25 25逐次递加的,进行一下测试,把start值改成75看一下会不会跳转去第4页
可以看到,改变了值了以后确实成功的跳转页面了,也就证明我们的猜想是正确的,接下来就可以通过一个循环来实现这个功能了
start = int(input('输入要爬取的起始页:'))
end = int(input('输入要爬取的末尾页:'))
for i in range(start, end+1):time.sleep(2)page = (i-1) * 25
得到了这个start的值后我们就需要进行拼接url的功能实现
com_url = 'https://movie.douban.com/top250?start=' + str(page)
至此,分析也就算结束了。
二、完整代码
import requests
from lxml import etree
import csv
import timeclass DoubanSpider(object):def __init__(self):self.header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36'}# 发请求 获响应def get_source(self, com_url):res = requests.get(com_url, headers=self.header)html = res.content.decode('utf-8')return html# 解析数据def parsed_source(self, html):tree = etree.HTML(html)divs = tree.xpath('//div[@class="info"]')# print(divs)lis_data = []for div in divs:d = {}# 标题title = div.xpath('./div[@class="hd"]/a/span/text()')[0].strip()# print(title)# 评分score = div.xpath('./div[@class="bd"]/div[@class="star"]/span[@class="rating_num"]/text()')[0].strip()# print(score)# 评价人数evaluate = div.xpath('./div[@class="bd"]/div[@class="star"]/span[last()]/text()')[0].strip()# print(evaluate)# 引用quote = div.xpath('./div[@class="bd"]/p[@class="quote"]/span/text()')if quote:quote = quote[0]else:quote = ''# 电影链接urllink_url = div.xpath('./div[@class="hd"]/a/@href')[0].strip()# print(link_url)# 根据key值提取数据d['title'] = titled['score'] = scored['evaluate'] = evaluated['quote'] = quoted['link_url'] = link_urllis_data.append(d)# print(lis_data)return lis_data# 保存数据def save_source(self, move_data, header):with open('movie_data.csv', 'a', encoding='utf-8-sig', newline='') as f:w = csv.DictWriter(f, header)# 写入表头w.writeheader()# writerows 一次性写入多行数据w.writerows(move_data)# 主函数def main(self):start = int(input('输入要爬取的起始页:'))end = int(input('输入要爬取的末尾页:'))for i in range(start, end+1):time.sleep(2)page = (i-1) * 25com_url = 'https://movie.douban.com/top250?start=' + str(page)h = self.get_source(com_url)# print(h)print('爬虫机器人正在爬取第%d页' % i)move_data = self.parsed_source(h)# 设置表头header = ['title', 'score', 'evaluate', 'quote', 'link_url']# print(move_data)self.save_source(move_data, header)if __name__ == '__main__':# 实例化对象Spider = DoubanSpider()# 主函数调用Spider.main()
三、运行结果
爬虫经典案例 | 爬取豆瓣top250相关推荐
- 【爬虫】案例(爬取豆瓣top250)[完整+详细]
文章目录 1.需求 2.流程 3.实现 导包 主函数 数据获取 数据解析 存储到excel 简易数据库 存储到数据库 5.完整代码 6.小注 1.需求 爬取豆瓣top250的电影的播放链接,封面链接, ...
- Python爬虫入门 | 4 爬取豆瓣TOP250图书信息
先来看看页面长啥样的:https://book.douban.com/top250 我们将要爬取哪些信息:书名.链接.评分.一句话评价-- 1. 爬取单个信息 我们先来尝试爬取书名,利用之 ...
- 爬虫实战1:爬取豆瓣top250电影
爬取豆瓣排行榜前250名电影名称 import urllib.request import bs4 import reheaders = {"User-Agent": " ...
- python爬取b站搜索结果_Python爬虫实例:爬取猫眼电影——破解字体反爬,Python爬虫实例:爬取B站《工作细胞》短评——异步加载信息的爬取,Python爬虫实例:爬取豆瓣Top250...
字体反爬 字体反爬也就是自定义字体反爬,通过调用自定义的字体文件来渲染网页中的文字,而网页中的文字不再是文字,而是相应的字体编码,通过复制或者简单的采集是无法采集到编码后的文字内容的. 现在貌似不少网 ...
- 爬虫基础之爬取豆瓣top250电影名字
这个比较简单,直接上代码,有需要的自己研究,转载注明出处原创地址 import requests from bs4 import BeautifulSoup import reclass P:def ...
- [python爬虫] BeautifulSoup和Selenium对比爬取豆瓣Top250电影信息
这篇文章主要对比BeautifulSoup和Selenium爬取豆瓣Top250电影信息,两种方法从本质上都是一样的,都是通过分析网页的DOM树结构进行元素定位,再定向爬取具体的电影信息,通过代码的对 ...
- Python爬虫菜鸟入门,爬取豆瓣top250电影 (自己学习,如有侵权,请联系我删除)
Python爬虫菜鸟入门,爬取豆瓣top250电影 (自己学习,如有侵权,请联系我删除) import requests from bs4 import BeautifulSoup import ti ...
- 爬虫实战:爬取豆瓣电影 Top-250 到 Excel 表格中
最近在家无聊自学了python的一些基础知识.后来看到许多朋友都在写爬虫,自己感觉很有意思,也想试一下 >____< 其实本来我是想将数据爬取到excel之后再增加一些数据库操作,然后用f ...
- python爬虫爬取豆瓣top250电影影评
信息系统课程项目,小组准备做一个电影推荐系统,自己选了觉得很有趣的资源模块,需要获取电影的评价资源等信息.花了大约一周看Web Scraping with Python这本书,对爬虫有了大体但是初略的 ...
最新文章
- c oracle long raw,初次用Oracle,不会用Long Raw类型,请大家帮忙看看
- 刀剑英雄登陆显示服务器繁忙,玩刀剑遇到问题解决方法
- 资料分享:送你一本《数据结构与算法JavaScript描述》电子书!
- MySQL8.0 - 新特性 - Instant Add Column
- 【Java规划】DOM XML Parser分解、遍历、创XML
- 广播,实现强制下线功能(项目文件已上传GitHub)
- 吴恩达深度学习课程deeplearning.ai课程作业:Class 1 Week 4 assignment4_1
- 《你还在我身旁》 香港中文大学《独立时代》杂志社微情书征文大赛一等奖作品。作者为香港中文大学学生戴畅。
- linux内存测试工具memtest,Linux-内存检测利器Memtest86+v1.70
- WinEdt LaTex(二)—— 空心中括号
- php的public、protected、private三种访问控制模式的区别
- 整天说Code Review重要,你知道应该关注哪些关键点吗?
- 如何使用MOQ进行单元测试
- SVN客户端使用详细
- 作为前端程序员:你必须知道的常用英语词汇!!全是干货!!!
- 跟谁学 英语口语20090927疑问句
- ASP.NET 抓取网页源文件
- 100个python算法超详细讲解:三色旗
- 大数据是人类福音还是洪水猛兽?
- 多项式除法的实现(附c代码)