经过一个多星期的学习,对python3的语法有了一定了解,马上动手做了一个爬虫,检验学习效果

目标

  • 爬取豆瓣电影top250中每一部电影的名称、排名、链接、名言、评分

准备工作

  • 运行平台:windows10
  • IDE:PyCharm
  • requests、BeautifulSoup库(使用pip进行安装)

第一步:向服务器发送请求,获得响应

由于豆瓣电影top250上信息均在html源码中,故需获取其源码,使用requests库。代码如下:

import requestsdef get_html(url):response = requests.get(url)  # 发送get请求if response.status_code == 200:  # 如果服务器响应成功,返回网页源代码return response.textelse:print("访问失败")

第二步:对源码进行解析,提取

  1. 单页分析

    • 首先分析原网页代码:

      发现我们所需要的信息都在 li 标签中,所以我们需要定位在li标签中提取信息
      但是,我们又发现:在真正含有我们所需要的信息的li 标签前,还有19个不含我们所需信息的li标签:


      所以,在提取信息的时候需要将前19个 li 标签排除在外
      再对含有我们所需内容的 li 标签进行分析:

      可以看到:影片名为<span class="title"标签的文本内容;排名为<em的文本内容;链接是<a 标签中href属性对应的值;名言为标签<span class=“inq” 的文本内容;评分为<span class=“rating_num” property=“v:average” 的文本内容;
      利用这些信息就可以利用find()函数定位信息,进行提取

    代码如下:

    from bs4 import BeautifulSoupdef parse_html(html):
    soup = BeautifulSoup(html, 'lxml') # 创建BeautifulSoup对象,使用lxml解析库
    items = soup.find_all(name='li')  # 查询名称为li的元素,以列表形式输出
    for item in items[19:]:
    # 注意这里的[19:],对网页源码分析后发现前19个li标签中并没有我们需要的数据,所以将其排除在外yield {# 利用find()函数定位我们需要的数据,并作为生成器元素'title': item.span.get_text(),    # 影片名'index': item.find(name='em').text,   # 影片排名'image': item.find(name='a')['href'],     # 影片链接'quote': item.find(class_="inq").text,   # 影片名言'score': item.find(class_="rating_num").text # 影片评分}  # 构造生成器,作为函数的返回结果# 获取Tag对象的文本信息有三种方法,.string、.text、.get_text()
    

    以上完成了对豆瓣电影一页源代码的解析,接下来进行多页的解析,将250部电影的信息全部爬取下来:

多页爬取

在换页的时候,我们发现网页的URL发生了改变:

 第二页的URL:https://movie.douban.com/top250?start=25&filter=第三页的URL:https://movie.douban.com/top250?start=50&filter=

我们发现,每跳一页,URL中参数start的值就增加25,所以可将start作为偏移量,来定位每一页网址.
代码如下:

# 解析源码
def main(start):url = 'https://movie.douban.com/top250?start=' + str(start) + '&filter'  # 定位top250的urlhtml = get_html(url)  # 获取源码for item in parse_html(html):print(item)if __name__ == '__main__':for page in range(10):main(page * 25)   # 遍历10页,250部电影

将爬取到的信息写入txt文件:

定义如下函数,实现将数据写入txt文件的操作

def write_to_file(content):with open("movies.txt", 'a', encoding='utf-8') as file:  # 以追加的权限打开文件movies.txtfile.write(json.dumps(content, ensure_ascii=False) + '\n')  # ensure_ascii设为False,保证输出是中文形式,而不是ASCII编码# json.dumps()序列化时默认对中文使用ascii编码

这样就实现了豆瓣电影top250的爬取;

全部代码:

# 爬取豆瓣top250
import requests
import json
from bs4 import BeautifulSoup# 获取源码
def get_html(url):response = requests.get(url)if response.status_code == 200:return response.textelse:print("访问失败")# 解析源码
def parse_html(html):soup = BeautifulSoup(html, 'lxml') # 创建BeautifulSoup对象,使用lxml解析库items = soup.find_all(name='li')  # 查询名称为li的元素,以列表形式输出for item in items[19:]:# 注意这里的[19:],对网页源码分析后发现前19个li标签中并没有我们需要的数据,所以将其排除在外yield {# 利用find()定位我们需要的数据,并作为生成器元素'title': item.span.get_text(),'index': item.find(name='em').text,'image': item.find(name='a')['href'],'quote': item.find(class_="inq").text,'score': item.find(class_="rating_num").text}# 构造生成器,作为函数的返回结果# 将数据转化为json字符串并写入到文件中
def write_to_file(content):with open("movies.txt", 'a', encoding='utf-8') as file:  # 以追加的权限打开文件movies.txtfile.write(json.dumps(content, ensure_ascii=False) + '\n')  # ensure_ascii设为False,保证输出是中文形式,而不是ASCII编码# json.dumps()序列化时默认对中文使用ascii编码def main(start):url = 'https://movie.douban.com/top250?start=' + str(start) + '&filter'  # 定位top250的urlhtml = get_html(url)for item in parse_html(html):print(item)write_to_file(item)# 执行函数,完成爬取
if __name__ == '__main__':for i in range(10):main(i * 25)

从中的感觉就是,基本的语法、函数的使用是比较简单的;关键之处在于对网页源码的分析,找到合适的提取信息的方式。

输出结果

{'title': '肖申克的救赎', 'index': '1', 'image': 'https://movie.douban.com/subject/1292052/', 'quote': '希望让人自由。', 'score': '9.6'}
{'title': '霸王别姬', 'index': '2', 'image': 'https://movie.douban.com/subject/1291546/', 'quote': '风华绝代。', 'score': '9.6'}
{'title': '这个杀手不太冷', 'index': '3', 'image': 'https://movie.douban.com/subject/1295644/', 'quote': '怪蜀黍和小萝莉不得不说的故事。', 'score': '9.4'}
{'title': '阿甘正传', 'index': '4', 'image': 'https://movie.douban.com/subject/1292720/', 'quote': '一部美国近现代史。', 'score': '9.4'}
{'title': '美丽人生', 'index': '5', 'image': 'https://movie.douban.com/subject/1292063/', 'quote': '最美的谎言。', 'score': '9.5'}
{'title': '泰坦尼克号', 'index': '6', 'image': 'https://movie.douban.com/subject/1292722/', 'quote': '失去的才是永恒的。 ', 'score': '9.3'}
{'title': '千与千寻', 'index': '7', 'image': 'https://movie.douban.com/subject/1291561/', 'quote': '最好的宫崎骏,最好的久石让。 ', 'score': '9.3'}
{'title': '辛德勒的名单', 'index': '8', 'image': 'https://movie.douban.com/subject/1295124/', 'quote': '拯救一个人,就是拯救整个世界。', 'score': '9.4'}
{'title': '盗梦空间', 'index': '9', 'image': 'https://movie.douban.com/subject/3541415/', 'quote': '诺兰给了我们一场无法盗取的梦。', 'score': '9.3'}
{'title': '机器人总动员', 'index': '10', 'image': 'https://movie.douban.com/subject/2131459/', 'quote': '小瓦力,大人生。', 'score': '9.3'}
{'title': '忠犬八公的故事', 'index': '11', 'image': 'https://movie.douban.com/subject/3011091/', 'quote': '永远都不能忘记你所爱的人。', 'score': '9.3'}
{'title': '三傻大闹宝莱坞', 'index': '12', 'image': 'https://movie.douban.com/subject/3793023/', 'quote': '英俊版憨豆,高情商版谢耳朵。', 'score': '9.2'}
{'title': '海上钢琴师', 'index': '13', 'image': 'https://movie.douban.com/subject/1292001/', 'quote': '每个人都要走一条自己坚定了的路,就算是粉身碎骨。 ', 'score': '9.2'}
{'title': '放牛班的春天', 'index': '14', 'image': 'https://movie.douban.com/subject/1291549/', 'quote': '天籁一般的童声,是最接近上帝的存在。 ', 'score': '9.2'}
{'title': '大话西游之大圣娶亲', 'index': '15', 'image': 'https://movie.douban.com/subject/1292213/', 'quote': '一生所爱。', 'score': '9.2'}
{'title': '楚门的世界', 'index': '16', 'image': 'https://movie.douban.com/subject/1292064/', 'quote': '如果再也不能见到你,祝你早安,午安,晚安。', 'score': '9.2'}
{'title': '教父', 'index': '17', 'image': 'https://movie.douban.com/subject/1291841/', 'quote': '千万不要记恨你的对手,这样会让你失去理智。', 'score': '9.2'}
{'title': '龙猫', 'index': '18', 'image': 'https://movie.douban.com/subject/1291560/', 'quote': '人人心中都有个龙猫,童年就永远不会消失。', 'score': '9.1'}
{'title': '星际穿越', 'index': '19', 'image': 'https://movie.douban.com/subject/1889243/', 'quote': '爱是一种力量,让我们超越时空感知它的存在。', 'score': '9.2'}
{'title': '熔炉', 'index': '20', 'image': 'https://movie.douban.com/subject/5912992/', 'quote': '我们一路奋战不是为了改变世界,而是为了不让世界改变我们。', 'score': '9.2'}
.......
.......
{'title': '荒野生存', 'index': '230', 'image': 'https://movie.douban.com/subject/1905462/', 'quote': '出门必备:本草纲目。', 'score': '8.6'}
{'title': '英国病人', 'index': '231', 'image': 'https://movie.douban.com/subject/1291853/', 'quote': 'In memory, love lives forever...', 'score': '8.5'}
{'title': '血钻', 'index': '232', 'image': 'https://movie.douban.com/subject/1428175/', 'quote': '每个美丽事物背后都是滴血的现实。', 'score': '8.5'}
{'title': '聚焦', 'index': '233', 'image': 'https://movie.douban.com/subject/25954475/', 'quote': '新闻人的理性求真。', 'score': '8.8'}
{'title': '国王的演讲', 'index': '234', 'image': 'https://movie.douban.com/subject/4023638/', 'quote': '皇上无话儿。', 'score': '8.3'}
{'title': '迁徙的鸟', 'index': '235', 'image': 'https://movie.douban.com/subject/1292281/', 'quote': '最美的飞翔。', 'score': '9.1'}
{'title': '非常嫌疑犯', 'index': '236', 'image': 'https://movie.douban.com/subject/1292214/', 'quote': '我不信仰上帝,但我敬畏上帝。', 'score': '8.6'}
{'title': '勇士', 'index': '237', 'image': 'https://movie.douban.com/subject/3217169/', 'quote': '热血沸腾,相当完美的娱乐拳击大餐。', 'score': '8.9'}
{'title': '燕尾蝶', 'index': '238', 'image': 'https://movie.douban.com/subject/1307793/', 'quote': '现实与童话交相辉映的旅程。', 'score': '8.6'}
{'title': '黑鹰坠落', 'index': '239', 'image': 'https://movie.douban.com/subject/1291824/', 'quote': '还原真实而残酷的战争。', 'score': '8.6'}
{'title': '遗愿清单', 'index': '240', 'image': 'https://movie.douban.com/subject/1867345/', 'quote': '用剩余不多的时间,去燃烧整个生命。', 'score': '8.5'}
{'title': '穆赫兰道', 'index': '241', 'image': 'https://movie.douban.com/subject/1292217/', 'quote': '大卫·林奇的梦境迷宫。', 'score': '8.3'}
{'title': '我爱你', 'index': '242', 'image': 'https://movie.douban.com/subject/5908478/', 'quote': '你要相信,这世上真的有爱存在,不管在什么年纪 ', 'score': '9.0'}
{'title': '叫我第一名', 'index': '243', 'image': 'https://movie.douban.com/subject/4798888/', 'quote': '乐观比一切都有力量。', 'score': '8.6'}
{'title': '枪火', 'index': '244', 'image': 'https://movie.douban.com/subject/1300741/', 'quote': '一群演技精湛的戏骨,奉献出一个精致的黑帮小品,成就杜琪峰群戏的巅峰之作。', 'score': '8.6'}
{'title': '荒岛余生', 'index': '245', 'image': 'https://movie.douban.com/subject/1298653/', 'quote': '一个人的独角戏。', 'score': '8.5'}
{'title': '2001太空漫游', 'index': '246', 'image': 'https://movie.douban.com/subject/1292226/', 'quote': '现代科幻电影的开山之作,最伟大导演的最伟大影片。', 'score': '8.7'}
{'title': '上帝也疯狂', 'index': '247', 'image': 'https://movie.douban.com/subject/1297478/', 'quote': '纯净原始的笑与感动。', 'score': '8.6'}
{'title': '千钧一发', 'index': '248', 'image': 'https://movie.douban.com/subject/1300117/', 'quote': '一部能引人思考的科幻励志片。', 'score': '8.7'}
{'title': '大卫·戈尔的一生', 'index': '249', 'image': 'https://movie.douban.com/subject/1305725/', 'quote': '捍卫人权只是信仰,一点不妨碍其行为的残忍。', 'score': '8.6'}
{'title': '蓝色大门', 'index': '250', 'image': 'https://movie.douban.com/subject/1308575/', 'quote': '青春的窃窃私语。 ', 'score': '8.3'}

使用python3爬取豆瓣电影top250相关推荐

  1. python爬取豆瓣电影top250_【Python3爬虫教程】Scrapy爬取豆瓣电影TOP250

    今天要实现的就是使用是scrapy爬取豆瓣电影TOP250榜单上的电影信息. 步骤如下: 一.爬取单页信息 首先是建立一个scrapy项目,在文件夹中按住shift然后点击鼠标右键,选择在此处打开命令 ...

  2. Python爬虫 爬取豆瓣电影TOP250

    Python爬虫 爬取豆瓣电影TOP250 最近在b站上学习了一下python的爬虫,实践爬取豆瓣的电影top250,现在对这两天的学习进行一下总结 主要分为三步: 爬取豆瓣top250的网页,并通过 ...

  3. python BeautifulSoup爬取豆瓣电影top250信息并写入Excel表格

    豆瓣是一个社区网站,创立于2005年3月6日.该网站以书影音起家,提供关于书籍,电影,音乐等作品信息,其描述和评论都是由用户提供的,是Web2.0网站中具有特色的一个网站. 豆瓣电影top250网址: ...

  4. scrapy1.3爬取豆瓣电影top250

    学习<爬虫框架scrapy,爬取豆瓣电影top250>,用scrapy1.3实践,记录学习过程 1 . 新建项目 进入打算存储代码的目录,命令行运行如下语句 scrapy startpro ...

  5. 爬虫练习-爬取豆瓣电影TOP250的数据

    前言: 爬取豆瓣电影TOP250的数据,并将爬取的数据存储于Mysql数据库中 本文为整理代码,梳理思路,验证代码有效性--2020.1.4 环境: Python3(Anaconda3) PyChar ...

  6. python爬取豆瓣电影top250_用Python爬虫实现爬取豆瓣电影Top250

    用Python爬虫实现爬取豆瓣电影Top250 #爬取 豆瓣电影Top250 #250个电影 ,分为10个页显示,1页有25个电影 import urllib.request from bs4 imp ...

  7. 案例:爬取豆瓣电影Top250中的电影信息

    案例:爬取豆瓣电影Top250中的电影信息 豆瓣电影Top250首页 分析请求地址 在豆瓣电影Top250首页的底部可以确定电影信息一共有10页内容,每页25个电影信息,如下图: 切换页面,可以看到浏 ...

  8. 利用python爬取豆瓣电影top250

    利用python爬取豆瓣电影top250: 注:本内容只是作为个人学习记录 1.业务分析 进入网页https://movie.douban.com/top250 可以看见每部电影都呈现在眼前,点击电影 ...

  9. 爬取豆瓣电影Top250影片信息

    爬取豆瓣电影Top250影片信息 查看影片的详细信息 爬取过程 需安装的包 确定爬取地址 发送请求头 解析数据 保存数据 完整代码 查看影片的详细信息 进入豆瓣电影Top250,选择某一影片,右击,选 ...

最新文章

  1. docker 厂商 容器_中国容器厂商综合实力排名,新鲜出炉!
  2. flask使用tablib导出excel数据表
  3. C语言 指针与字符串
  4. Git详解之六 Git工具(转)
  5. linux 系统命令和方法
  6. 基于Android的员工工资管理系统
  7. 用AliDDNS脚本实现动态域名
  8. 申请并部署阿里云SSL免费证书详细流程
  9. Hibernate的4种继承关系
  10. 豪迪QQ群发通杀破解补丁使用教程
  11. 我的世界java版幻翼_见到幻翼的方式是熬夜?这几个被忽略了
  12. Safari浏览器插件 Tampermonkey
  13. hdu 3954 Level up(成段更新)
  14. 目前主流的几种数字视频压缩编解码标准(转载)
  15. 前端程序员为何焦虑?web前端未来终将是什么样?
  16. iphone二手机在哪里回收比较好(哪里回收的价格最高)
  17. 详细剖析二进制文件的读写
  18. 虚幻Material
  19. Prometheus监控Redis的配置
  20. 天梯赛--清点代码库

热门文章

  1. php 仿美团切换城市,微信小程序仿美团城市选择的实现
  2. 使用mysql实现数据对比,筛选
  3. 你的花呗额度突然被下调了吗?
  4. RNN循环神经网络图解概念及从零开始实现
  5. 4岁估值45亿美金,商汤为何能入选AI国家队
  6. 这个在线数据库帮你分析基因在细胞系当中的表达情况,介绍及使用教程
  7. 不愿意和别人打交道_不爱与人打交道的人,都是什么心理?你有了解吗
  8. Maven项目中的依赖管理——dependencyManagement
  9. 【简易广告机】利用树莓派制作一个简易的广告机(1)
  10. ren 命令中无法匹配中文问题