影评许可证

公众号[2019]第22期

本栏目由“数据皮皮侠”独家呈献

专场

python爬虫实战——豆瓣电影get初体验

2019.10.28 / 早上7点场 / 免费

本期“栏目”的四大看点:

1 如何爬取2 如何解析与提取3 如何解析json数据4 实战:爬取豆瓣影视信息

1 如何爬取

how to Obtain

我们老说爬虫,那么具体到底怎么爬?爬什么?

首先,“爬虫四步”:获取数据(包含请求和响应两个动作)、解析数据、提取数据、存储数据。

最简单的请求方式是:requests.get()

代码:

import requestsurl = ''response = requests.get(url)

此外,我们还需要一个工具,叫做Network。在它的帮助下,我们能看到所有的请求,这样我们才能完成爬虫四步

Network能够记录浏览器的所有请求。我们最常用的是:ALL(查看全部)/XHR(仅查看XHR)/Doc(Document,第0个请求一般在这里),有时候也会看看:Img(仅查看图片)/Media(仅查看媒体文件)/Other(其他)。最后,JS和CSS,则是前端代码,负责发起请求和页面实现;Font是文字的字体。

在爬虫里, XHR和Doc是我们最常用的。我们能在Doc里找到一个网页的源代码,而在网页源代码里找不到的信息,通常都能在XHR里找到。有它的存在,人们不必刷新/跳转网页,即可加载新的内容。

2 解析与提取

Parsing and Reading

当数据藏匿于网页源代码,在“爬虫四步”链里,最重要的库叫BeautifulSoup,它能提供一套完整的数据解析、数据提取解决方案。(关于BeautifulSoup的安装和使用,在前期文章中介绍过哦~)

XHR所传输的数据,最重要的一种是用json格式写成的,和html一样,这种数据能够有组织地存储大量内容。json的数据类型是“文本”,我们称为字符串。我们能很容易将json格式的数据转化为列表/字典,反之也可以。

3 如何解析json数据

How to Parse JSON Data

通过Response类支持使用json()方法来将数据转为list/dic,比如:

import requestsr=requests.get(‘http://……’)print(r.json())

请求本身很有意思。requests.get()里面其实只有一个参数,即url。但其实,这个请求可以有多个参数。

params,可以让我们带着参数来请求数据:我想要第几页?我想要搜索的关键词?我想要多少个数据?

headers,请求头。它告诉服务器,我的设备/浏览器是什么?我从哪个页面而来?

再往后,除了get请求之外,还存在着另一种请求方式——post。post区别于get的是:get是明文显示参数,post是非明文显示参数。学会post,又有两个参数可用

(1)在post请求里,我们使用data来传递参数,其用法和params非常相像。

(2)cookies,中文名是“小饼干”。但它却和“小饼干”并无关联。它的作用是让服务器“记住你”,比如一般当你登录一个网站,你都会在登录页面看到一个可勾选的选项“记住我”。如果你点了勾选,服务器就会生成一个cookies和你的账号绑定。接着,它把这个cookies告诉你的浏览器,让浏览器把cookies存储到你的本地电脑。当下一次,浏览器带着cookies访问博客,服务器会知道你是何人,你不需要再重复输入账号密码,就能直接访问。

到这,考虑极端情况。代码可能会是这样:

import requestsurl_1 = 'https://…'headers = {'user-agent':''}data = {}# 定义url,headers和datalogin_in = requests.post(url,headers=headers,data=data)cookies = login_in.cookies# 完成登录,获取cookiesurl_2 = 'https://…'params = {}# 定义url和paramsresponse=requests.get(url,headers=headers,params=params,cookies=cookies)# 带着cookies重新发起请求

4 如何爬取豆瓣电影数据?

Get Douban Movie Data

4.1

创建爬虫文件,获取url地址

地址为:url="https://movie.douban.com/top250"

4.2

使用request获取第一页的请求信息:

import requestsfrom bs4 import BeautifulSoupurl="https://movie.douban.com/top250"wb_data=requests.get(url)# 获取网页文本信息soup=BeautifulSoup(wb_data.text,'lxml')# 从soup中提取我们想要的信息titles=soup.select('div.hd>a')rates=soup.select('span.rating_num')imgs=soup.select('img[]')for title,rate,img in zip(titles,rates,imgs):    data={        'title':list(title.stripped_strings),        'rate':rate.get_text(),        'img':img.get('src')    }    print (data)

4.3

获取多页的请求信息

import requestsfrom bs4 import BeautifulSoupurls=['https://movie.douban.com/top250?start=n&filter=' for n in range(0,250,25)]for url in urls:    wb_data=requests.get(url)    # 获取网页文本信息    soup=BeautifulSoup(wb_data.text,'lxml')    # 从soup中提取我们想要的信息    titles=soup.select('div.hd>a')    rates=soup.select('span.rating_num')    imgs=soup.select('img[]')    for title,rate,img in zip(titles,rates,imgs):        data={            'title':list(title.stripped_strings),            'rate':rate.get_text(),            'img':img.get('src')        }        print(data)

4.4

下载电影图片地址到本地

import requestsfrom bs4 import BeautifulSoupi=0urls=['https://movie.douban.com/top250?start=n&filter=' for n in range(0,250,25)]for url in urls:    wb_data=requests.get(url)    # 获取网页文本信息    soup=BeautifulSoup(wb_data.text,'lxml')    # 从soup中提取我们想要的信息    titles=soup.select('div.hd>a')    rates=soup.select('span.rating_num')    imgs=soup.select('img[]')    for title,rate,img in zip(titles,rates,imgs):        data={            'title':list(title.stripped_strings),            'rate':rate.get_text(),            'img':img.get('src')        }        # 保存图片到本地        i+=1        fileName=str(i)+'、'+data['title'][0]+''+data['rate']+'分.jpg'        pic=requests.get(data['img'])        with open('E:/Envs/douban/douban_imgs/'+fileName,'wb')as photo:            photo.write(pic.content)        print(data)

4.5

爬取豆瓣热门美剧存储到mongodb中

将json数据转换为字典,然后根据键subjects循环取出里面的值,取出我们想要的数据

import requests,jsonurl='https://movie.douban.com/j/search_subjects?type=tv&tag=%E7%BE%8E%E5%89%A7&sort=recommend&page_limit=20&page_start=0'response_data=requests.get(url)# 将json数据转换为字典类型并根据键名循环取出值json_data=json.loads(response_data.text)# 查看键名# print(json_data)for tv in json_data['subjects']:    # print(tv)    # 取出我们需要的数据    data={        'rate':tv['rate'],        'title':tv['title'],        'img_url':tv['cover'],        'id':tv['id'],        # 自定义一个标志        'tag':"美剧"    }    print(data)

获取多页数据

import requests,json# url='https://movie.douban.com/j/search_subjects?type=tv&tag=%E7%BE%8E%E5%89%A7&sort=recommend&page_limit=20&page_start=0'# 这里的200可以修改为更高数字,目前只爬取200条数据urls=['https://movie.douban.com/j/search_subjects?type=tv&tag=%E7%BE%8E%E5%89%A7&sort=recommend&page_limit=20&page_start='+str(n) for n in range(0,200,20)]for url in urls:    response_data=requests.get(url)    # 将json数据转换为字典类型并根据键名循环取出值    json_data=json.loads(response_data.text)    # 查看键名    # print(json_data)    for tv in json_data['subjects']:        # print(tv)        # 取出我们需要的数据        data={            'rate':tv['rate'],            'title':tv['title'],            'img_url':tv['cover'],            'id':tv['id'],            # 自定义一个标志            'tag':"美剧"        }        print(data)

保存数据到mongodb数据库里面

import requests,json,pymongo# url='https://movie.douban.com/j/search_subjects?type=tv&tag=%E7%BE%8E%E5%89%A7&sort=recommend&page_limit=20&page_start=0'# 这里的200可以修改为更高数字,目前只爬取200条数据client=pymongo.MongoClient(host='localhost',port=27017)db=client.db_bkcollection = db.doubanurls=['https://movie.douban.com/j/search_subjects?type=tv&tag=%E7%BE%8E%E5%89%A7&sort=recommend&page_limit=20&page_start='+str(n) for n in range(0,200,20)]for url in urls:    response_data=requests.get(url)    # 将json数据转换为字典类型并根据键名循环取出值    json_data=json.loads(response_data.text)    # 查看键名    # print(json_data)    for tv in json_data['subjects']:        # print(tv)        # 取出我们需要的数据        data={            'rate':tv['rate'],            'title':tv['title'],            'img_url':tv['cover'],            'id':tv['id'],            # 自定义一个标志            'tag':"美剧"        }        collection.insert_one(data)        print(data)

END

本期“ 总导演 ”:李雨萱

本期“ 剪辑师 ”:李嘉楠

本期“栏目”进入尾声了,我们下期再见!

如果你有任何问题欢迎在“栏目下方”留言

关注公众号还可获取更多python的相关内容

xhr get获取文件流下载文件_python爬虫实战——豆瓣电影get初体验相关推荐

  1. python提取ajax异步加载数据_python爬取豆瓣电影分类排行榜引出的异步加载(AJAX)问题...

    1.背景 之前的文章中已经介绍过猫眼TOP100的电影信息爬取案例,网页每页有10条电影信息,通过翻页发现URL变化规律构造循环爬取10页100条全部电影信息.但是豆瓣电影分类排行榜的网页情况就所不同 ...

  2. python爬虫豆瓣电影按电影类型_python爬虫之豆瓣电影评分

    想知道一部电影好不好看,豆瓣的评分还是比较靠谱的,于是,搞了搞,写了一个小爬虫: 好像csdn出现bug了,还是游览器的问题,图片插入不进去: 说明文档: 1.直接讲代码保存成.py文件 2.输入你喜 ...

  3. scrapy获取a标签的连接_python爬虫——基于scrapy框架爬取网易新闻内容

    python爬虫--基于scrapy框架爬取网易新闻内容 1.需求[前期准备] 2.分析及代码实现(1)获取五大板块详情页url(2)解析每个板块(3)解析每个模块里的标题中详情页信息 点击此处,获取 ...

  4. python大规模获取豆瓣影评_python爬取豆瓣电影排行榜(requests)

    ''' 爬取豆瓣电影排行榜 设计思路: 1.先获取电影类型的名字以及特有的编号 2.将编号向ajax发送get请求获取想要的数据 3.将数据存放进excel表格中 ''' 环境部署: 软件安装: 模块 ...

  5. python爬虫文件代码大全-Python网络爬虫实战项目代码大全(长期更新,欢迎补充)...

    WechatSogou[1]- 微信公众号爬虫.基于搜狗微信搜索的微信公众号爬虫接口,可以扩展成基于搜狗搜索的爬虫,返回结果是列表,每一项均是公众号具体信息字典.[1]: https://github ...

  6. scrapy获取a标签的连接_Python爬虫 scrapy框架初探及实战!

    Scrapy框架安装 操作环境介绍 操作系统:Ubuntu19.10 Python版本:Python3.7.4 编译器:pycharm社区版 安装scrapy框架(linux系统下) 安装scrapy ...

  7. Golang实现并发版网络爬虫:豆瓣-电影名人数评分爬取并保存文件

    爬取豆瓣电影信息: 双向爬取: 横向:以页为单位.纵向:以一个页面内的条目为单位. 横向: https://movie.douban.com/top250?start=0&filter= 1 ...

  8. python爬虫框架教程_Python爬虫实战(十二):爬虫框架Scrapy的第一个爬虫示例入门教程...

    本文主要向大家介绍了Python爬虫实战的爬虫框架Scrapy的第一个爬虫示例入门教程,通过具体的内容向大家展现,希望对大家学习Python爬虫实战有所帮助. 我们使用dmoz.org这个网站来作为小 ...

  9. 如何运用python爬游戏皮肤_Python爬虫实战之 爬取王者荣耀皮肤

    王者荣耀是目前非常火的一款游戏,相信大家都对其中的人物很感兴趣,那么今天就带大家来爬取王者荣耀的皮肤,可以选一款喜欢的来当电脑壁纸.第一步,拿到url地址 第二步,获取各个人物皮肤数据 第三步,保存文 ...

最新文章

  1. reddit_如何使用Python创建自定义Reddit通知系统
  2. django 自定义日志配置
  3. python类的属性和对象属性_在python的类中动态添加属性与生成对象
  4. 【转载】ftp获取文件
  5. 网站性能分析(下)-让网站并行加载但顺序执行JS
  6. mysql varchar(max)_等价于MySQL中的varchar(max)?
  7. android开发关于和使用本机内存,内置存储卡和外置存储卡大揭秘
  8. Java 8:在新的Nashorn JS引擎中编译Lambda表达式
  9. rust风化速度_反驳《Golang、Rust的执行速度的对照,让人大吃一惊。》——不会别瞎说...
  10. Windows上pip install kenlm报错解决
  11. AT91SAM9260EK-38k产生原理
  12. vscode 注释插件
  13. python使用os库临时改变环境变量
  14. html中一个页面大概多少px,当屏幕 (浏览器窗口) 小于 768px, 每一列的宽度是 100% -HTML教程_小白教程_css5.net...
  15. 国二c语言和南开100题,全国计算机二级C语言题库_南开100题.doc
  16. Python编写三级目录(升级版)
  17. Linux-shell篇之while用法
  18. Rhodamine-PEG-Pyrene,罗丹明聚乙二醇芘丁酸,Pyrene-PEG-RB
  19. 这20年我做了些什么
  20. html禁止后退按钮,关于禁止页面后退的一些方法

热门文章

  1. .NET 5开源项目:b站账号快速升级到 Lv6,每天自动签到,观看,分享,投币视频!...
  2. SM2 国密算法被 Linux 内核社区接受
  3. 为什么我们总是「习惯性辩解」?
  4. C# 9.0 新特性之 Lambda 弃元参数
  5. DotNetCore Web应用程序中的Session管理
  6. (四)开源C# WPF控件库《AduSkin – UI》
  7. 做“是非题”的正确姿势
  8. Stack Overflow引入CROKAGE,搜问题不用再东拼西凑
  9. 如何撰写较受欢迎的技术文章
  10. 部署Chart应用并使用.net core读取Kubernetes中的configMap