Python爬虫实战
未读在使用 Ajax 技术加载数据的网站中, JavaScript 发起的 HTTP 请求通常需要带上参数,而且参数的值都是经过加密的。
如果我们想利用网站的 REST API 来爬取数据,就必须知道其使用的加密方式。
破解过程需要抓包,阅读并分析网站的 js 代码。
这整个过程可能会花费一天甚至更长的时间。
问:那么是否有办法绕过这机制,直接获取网站数据?答:有的。使用 Selenium 库模拟浏览器行为来抓取网站数据,达到事半功倍的效果。
本文内容是利用 Selenium 爬取网易云音乐中的歌曲 《Five Hundred Miles》 的所有评论,然后存储到 Mongo 数据库。
1.前期准备本文中所用到的工具比较多,所以我将其列举出来。
1-1.SeleniumSelenium 是一个 Web 应用程序自动化测试的工具。它能够模拟浏览器进行网页加载。所以使用其来帮助我们解决 JavaScript 渲染问题。
接下来就是安装 selenium, 使用 pip 安装是最方便的。
1pip install selenium
1-2.Chrome 浏览器在爬取数据过程中, 需要启动 ...
Python爬虫实战
未读(一)故事的小黄花
从出生那年就飘着
童年的荡秋千
随记忆一直晃到现在
Re So So Si Do Si La
So La Si Si Si Si La Si La So
吹着前奏望着天空
我想起花瓣试着掉落……
小编猴哥有个爱好,喜欢一边听着熟悉的旋律,一边看着网易云音乐歌曲中的评论,特别是精彩评论。
评论内容,让人泫然流涕的故事,就是让人深思的段子。
(二)某天,猴哥突发奇想,想将自己平时喜欢听的歌曲的精彩评论爬取下来。以后就可以直接阅读这些评论,无须打开网页。
说干就干。
猴哥打开浏览器访问网易云音乐,随便点击某个歌曲页面。
现在大多数网站都采用 Ajax 技术来获取数据。所以需要先判断网页是否采用该技术。
有个谷歌浏览器插件名为 Toggle JavaScript,它能控制页面中 javascript 启用或者禁用。
正常的页面长这样:
当禁用页面 JavaScript 脚本之后,正常显示数据页面会变成一个空白页面。
因此,可以断定网易云音乐加载数据方式采用 Ajax。
Ajax 技术可以在不刷新页面的情况下,利用嵌在 HTML 文档中的 JavaScript 脚本向服 ...
时光荏苒,2018年已经过半。
又到一年一度的”618”购物节,是时候来一波”买买买”。
如果你目前想改变下自己,为自己的未来奋斗。
可以少买一两件衣服,少买一两箱零食,腾出一两百块钱来买几本书。
当当,京东正好有图书满减活动。
当当网的优惠还是相当大的,满200减100,满400减200,等同打 5 折。
如果书籍满足满减要求,就能优惠。
我个人也是买了一些书籍,坚持持续学习。
我推荐一些个人觉得不错的书籍。这些书籍基本上要么已经购买了,要么已经囤在购物车中。
另外,大部分书籍都是图灵图书推荐过。
1.Python 编程入门比较适合零基础,想入门的小伙伴。书籍用到的都是 Python 3.x 版本
2.Python 开发进阶如果小伙伴已经把基础知识学得差不多了,想进一步提高自己的能力。可以阅读进阶书籍。同样,书籍用到的都是 Python 3.x 版本。
3.数据分析单独把数据分析拎出来说,是因为数据分析挺有分量的。
4.算法通过阅读代码方式来学习算法是一个枯燥,痛苦的过程。因为需要很强的想象能力。我们换一种方式来,通过图片形式来学习算法 ...
苔痕絮语
未读今天这波分享可以说是自己热血来潮。
起因是自己收到某个问答社区小秘的问题邀请。
问题是 《谁能给我推荐几本linux的书?从基础到进阶提高的linux书?》。
自己挺怀念大学那段折腾 Linux 的时光,所以就忍不住评论一波。
可曾没有想到,这一评论的阅读量有 1.5 W
有些网友想要鸟哥 Linux 的学习视频,私信我以及到公众号后台留言。
因此,就有今天这篇文章。
一是我分享下自己学习 Linux 的过程,希望各位小伙伴不要踩坑。
二是分享学习资料。
大学二年级,我课程中有一门专业课《操作系统》。
当时授课老师是我最喜欢的老师。他原先在北京理工大学讲课,后来到我们学校教书。
他不仅自己学识渊博,而且有丰富的教学经验,讲课方式生动。
所以同学们很喜欢上他的课,当然我也是不例外。
另外他姓龚,同学们觉得他和蔼可亲,就经常称呼他“老龚”。
我自己预习《操作系统》课程,真是看不下去。
书本内容真的是深奥难懂又枯燥无味。
后来上课,老师用以先实践后理论的方式来讲课,我们都听得入神。
我记得龚老师那时说过一句很经典的话:
《操作系统》主要是讲解 Linux 系统。而我们现在使用的 Win ...
Python编程
未读我们从网上爬取数据,最后一步会考虑如何存储数据。
如果数据量不大,往往不会选择存储到数据库,而是选择存储到文件中,例如文本文件、CSV 文件、xls 文件等。
因为文件具备携带方便、查阅直观。
Python 作为胶水语言,搞定这些当然不在话下。
但在写数据过程中,经常因数据源中带有中文汉字而报错。最让人头皮发麻的编码问题。
我先说下编码相关的知识。
编码方式有很多种:UTF-8, GBK, ASCII 等。
ASCII 码是美国在上个世纪 60 年代制定的一套字符编码。
主要是规范英语字符和二进制位之间的关系。
英语词汇组成简单,由 26 个字母构成。使用一个字节就能表示一个字母符号。外加各种符号,使用 128 个字符就满足编码要求。
不同国家有不同语言文字。
同时,文字组成部分的数量相比英语字母要多很多。
根据不完全统计,汉字的数量大约将近 10 万个,日常所使用的汉字有 3000 个。
显然,ASCII 编码无法满足需求。所以汉字采用 GBK 编码,使用两个字节表示一个汉字。
简体中文的编码方式是 GBK2312。
那 UTF-8 又是什么编码?
这要先说 Unicode 了。
...
技术真的是日新月异,Web 网站已经脱离之前的静态网站的体系,转而使用动态语言搭建的动态网站。
这也衍生出一个问题:该如何存储数据了?
数据库就应运而生,它的作用是提供存储数据的容器。
方便 web 网站进行存储、查询、更新等。
数据库种类也很多,有成熟且稳定的 MySql 数据库,有后起之秀的 MangoDB 数据库,也有新时代宠儿 Redis 数据库。
除此之外,还有其他一些数据库,例如 Sqlite、Oracle 等。
那么问题来了,面对多种类型的数据库,自己该如何选择?
或许你因个人比较喜欢 MySql 数据库,所以选择它。
也许你在网络上查了一下资料,发现别人都推荐使用 MangoDB,所以就选择它。
这两种想法都是不能正确地选择。
任何脱离业务来谈架构都是在瞎扯。
因此,要根据项目业务的场景需求来决定选择哪种数据库。
每种数据库都各有优缺点,而选取标准是选择最优,最适合。
我个人的理解是结合以下几个方面来考虑:
1.读写速度这存储数据方式往往决定读写的速度。
Mysql 无论数据还是索引都存放在硬盘中。到要使用的时候才交换到内存中。能够处理远超过内存总量的数据。
Mo ...
Python爬虫实战
未读我爬取豆瓣影评,告诉你《复仇者联盟3》在讲什么?
《复仇者联盟3:无限战争》于 2018 年 5 月 11 日在中国大陆上映。截止 5 月 16 日,它累计票房达到 15.25 亿。这票房纪录已经超过了漫威系列单部电影的票房纪录。不得不说,漫威电影已经成为一种文化潮流。
复联 3 作为漫威 10 年一剑的收官之作。漫威确认下了很多功夫, 给我们奉献一部精彩绝伦的电影。
自己也利用周末时间去电影院观看。看完之后,个人觉得无论在打斗特效方面还是故事情节,都是给人愉悦的享受。
同时,电影还保持以往幽默搞笑的风格,经常能把观众逗得捧腹大笑。
如果还没有去观看的朋友,可以去电影院看看,确实值得一看。
本文通过 Python 制作网络爬虫,爬取豆瓣电影评论,并分析然后制作豆瓣影评的云图。
1.分析先通过影评网页确定爬取的内容。我要爬取的是用户名,是否看过,五星评论值,评论时间,有用数以及评论内容。
然后确定每页评论的 url 结构。
第二页 url 地址
第三页 url 地址:
最后发现其中的规律:除了首页,后面的每页 url 地址中只有 start= 的值逐页递增,其他 ...
Python编程
未读上篇文章中讲到 Django 如何启动以及配置 sessions 功能。sessions 功能用是跟踪用户的状态,经常结合 Cookie 功能实现自动登录功能。
所谓的“自动登录”指的是:我们登录一些网站,在不关闭浏览器以及距离上次登录时间不是很长的情况下。
无论我们在新的标签页打开网站,还是关闭页面重新打开网站,登录状态一直保持着。
本文内容有两个:一是利用 Django 实现自动登录功能,二是揭开“自动登录”的神秘面纱。
1.新建项目我为了将本系列所有文章的示例代码保持集中状态,所以直接在 Django_demo 项目中创建应用。
如果第一次看这文章,需要先创建项目(project),再创建应用(app)。
我新建的应用是 demo_session。
然后在 setting.py 中启动请用,并检查 sessions 组件是否启动。
因为需要 Cookie 功能,所以同样需要在 settings.py 增加一些配置。
12345678SESSION_COOKIE_NAME = "sessionid" # Session的cookie保存在浏 ...
Python编程
未读淘宝、天猫、京东等电商网站的出现,让我们足不出户就能购物。
在这些网站中,都有一个“购物车”的功能。当我们在不同商品页面将商品加入购物车,然后关闭浏览器。
等下次浏览该网站时,我们会依然发现购物车的商品还在。
这是怎么实现的了?类似这种场景,一般都是采用 Cookie + Session 方式来实现。
1.Cookie 机制HTTP 协议是无状态的。
所以服务器无法根据 HTTP 协议来辨别多个 HTTP 请求来自哪个用户。
在实际场景中,服务器经常需要追踪客户端的状态。为了解决这个问题, Cookie 技术应运而生。
cookie 一开始是服务器产生的一段随机字符串。
它的主要内容包括:名字,值,过期时间,路径与域等信息。
然后服务器将其发送给客户端。
在后续的请求中,cookie 会附在请求资源的 HTTP 请求头上,发送给服务器。
2.Session 机制如果不涉及用户登录等敏感信息时,Cookie 能够满足大部分的场景需求。
而客户端(如浏览器)会将 Cookie 是保存在硬盘中。
如果用户登录敏感信息保存到 cookie 中,会存在安全性问题。
因为当 HTTP 请求被黑客 ...
Python编程
未读当页面因需要展示的数据条目过多,导致无法在一个页面全部显示。
这时,页面经常会采用分页形式进行展示,然后每页显示 20 或者 50 等条数据。分页经常在网站上随处可见,
它大概是这样子:
这样的实现不仅提高了用户体验,还是减轻数据库读取数据的压力。
Django 自带名为 Paginator 的分页工具, 方便我们实现分页功能。本文就讲解如何使用 Paginator 实现分页功能。
1.PaginatorPaginator 类的作用是将我们需要分页的数据分割成若干份。
当我们实现化一个 Paginator 类的实例时,需要给 Paginator 传入两个参数。
第一个参数是数据源,可以是一个列表、元组、以及查询结果集 QuerySet。
第二个参数需要传入一个整数,表示每页显示数据条数。具体写法如下:
12345book_list = []for x in range(1, 26): # 一共 25 本书 book_list.append('Book ' + str(x))# 将数据按照规定每页显示 10 条, 进行分割paginator = Pagin ...