Python爬虫入门
未读上篇文章介绍 Scrapy 框架爬取网站的基本用法。但是爬虫程序比较粗糙,很多细节还需打磨。
本文主要是讲解 Scrapy 一些小技巧,能让爬虫程序更加完善。
1.设置 User-agentScrapy 官方建议使用 User-Agent 池, 轮流选择其中一个常用浏览器的 User-Agent来作为 User-Agent。
scrapy 发起的 http 请求中 headers 部分中 User-Agent 字段的默认值是Scrapy/VERSION (+http://scrapy.org),我们需要修改该字段伪装成浏览器访问网站。
1)同样在 setting.py 中新建存储 User-Agent 列表,
1234567891011121314151617181920212223242526272829303132333435UserAgent_List = [ "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.3 ...
Python爬虫入门
未读上篇文章介绍了爬虫框架 Scrapy 如何安装,以及其特性、架构、数据流程。
相信大家已经对 Scrapy 有人了初步的认识。
本文是 Scrapy 系列文章的第二篇,主要通过一个实例讲解 scrapy 的用法。
1.选取目标网络爬虫,顾名思义是对某个网站或者系列网站,按照一定规则进行爬取信息。
爬取程序的首要工作当然是选定爬取目标。
本次爬取目标选择是V电影,网址是http://www.vmovier.com/。
爬取内容是[最新推荐]栏目的前15条短视频数据信息。具体信息包括封面、标题、详细说明以及视频播放地址。
2.定义 Item为什么将爬取信息定义清楚呢?
因为接下来 Item 需要用到。在 Item.py 文件中,我们以类的形式以及 Field 对象来声明。
其中 Field 对象其实是一个字典类型,用于保存爬取到的数据。而定义出来的字段,可以简单理解为数据库表中的字段,但是它没有数据类型。
Item 则复制了标准的 dict API,存放以及读取跟字典没有差别。
V电影的 Item,我们可以这样定义:
12345678910111213import scrapyclas ...
Python爬虫入门
未读对于规模小、爬取数据量小、对爬取速度不敏感的爬虫程序, 使用 Requests 能轻松搞定。
这些爬虫程序主要功能是爬取网页、玩转网页。
如果我们需要爬取网站以及系列网站,要求爬虫具备爬取失败能复盘、爬取速度较高等特点。
很显然 Requests 不能完全满足我们的需求。
因此,需要一功能更加强大的第三方爬虫框架库 —— Scrapy
1.简介 ScrapyScrapy 是一个为了方便人们爬取网站数据,提取结构性数据而编写的分布式爬取框架。
它可以应用在包括数据挖掘, 信息处理或存储历史数据等一系列的程序中。
因其功能颇多,所以学会它需要一定的时间成本。
1-1.Scrapy 的特性Scrapy 是一个框架。因此,它集一些各功能强大的 python 库的优点于一身。下面列举其一些特性:
HTML, XML源数据 选择及提取 的内置支持
提供了一系列在spider之间共享的可复用的过滤器(即 Item Loaders),对智能处理爬取数据提供了内置支持。
通过 feed导出 提供了多格式(JSON、CSV、XML),多存储后端(FTP、S3、本地文件系统)的内置支持
提供了media ...
Python编程
未读数据结构,我们对它已经是耳熟能详。
对于计算机相关专业的大学生来说,它是一门专业必修课。
从事软件开发的人员则把它作为谋生必备技能。这充分体现数据结构的重要性。
因此,我们对数据结构是不得不学。
虽然数据结构的实现不限制语言,但市面上很多教程书籍都是以 C 语言作为编程语言进行讲解。
如果你喜欢且在学习 Python,可能会陷入苦于这样的烦恼中。
那就是没有 Python 版本的数据结构实现代码。
莫慌!我给大家推荐一个第三方库,它能让你这种烦恼立刻云消雾散。
GitHub仓库
Pygorithm 是由一个热心肠的印度小哥编写的开源项目。
他编写创建该库的初衷是出于教学目的。
我们不仅可以阅读源码的方式学习数据结构,而且可以把它当做现成工具来使用。
1.安装安装 python 库,我推荐使用 pip 方式,方便又省事。
1234pip install Pygorithm# 如果出现因下载失败导致安装不上的情况,可以先启动 ss 再执行安装命令# 或者在终端中使用代理pip --proxy http://代理ip:端口 install Pygorithm
2.支持的类型Pygor ...
Python爬虫实战
未读前面两篇文章介绍 requests 和 xpath 的用法。我们推崇学以致用,所以本文讲解利用这两个工具进行实战。
1.爬取目标本次爬取的站点选择电影天堂,网址是: www.ydtt8.net。
爬取内容是整个站点的所有电影信息,包括电影名称,导演、主演、下载地址等。具体抓取信息如下图所示:
2.设计爬虫程序2-1.确定爬取入口电影天堂里面的电影数目成千上万,电影类型也是让人眼花缭乱。
我们为了保证爬取的电影信息不重复, 所以要确定一个爬取方向。
目前这情况真让人无从下手。
但是,我们点击主页中的【最新电影】选项,跳进一个新的页面。蓦然有种柳暗花明又一村的感觉。
由图可知道,电影天堂有 5 个电影栏目,分别为最新电影、日韩电影、欧美电影、国内电影、综合电影。
每个栏目又有一定数量的分页,每个分页有 25 条电影信息。
那么程序的入口可以有 5 个 url 地址。
这 5 个地址分别对应每个栏目的首页链接。
2-2.爬取思路知道爬取入口,后面的工作就容易多了。
我通过测试发现这几个栏目除了页面的 url 地址不一样之外,其他例如提取信息的 xpath 路径是一样的。
因此,我把 5 ...
Python爬虫入门
未读前面的文章,我们已经学会正则表达式以及 BeautifulSoup库的用法。
我们领教了正则表达式的便捷,感受 beautifulSoup 的高效。
本文介绍也是内容提取的工具 —— Xpath,它一般和 lxml 库搭配使用。
所以,我称这两者为“干将莫邪”。
1.Xpath 和 lxml1-1.XpathXPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言。XPath 基于 XML 的树状结构,提供在数据结构树中找寻节点的能力。
Xpath 原本是用于选取 XML 文档节点信息。XPath 是于 1999 年 11 月 16 日 成为 W3C 标准。因其既简单方便又容易,所以它逐渐被人所熟知。
1-2.lxmllxml 是功能丰富又简单易用的,专门处理 XML 和 HTML 的 Python 官网标准库。
2.Xpath 的语法正则表达式的枯燥无味又学习成本高,Xpath 可以说是不及其万分之一。所以只要花上 10 分钟,掌握 Xpath 不在话下。Xpath 的语言以及如何从 HTML dom 树中提取信息,我将其归纳为“主干 ...
我最近阅读民主与建设出版社出版的《如何阅读一本书》,自己收获颇多。
这本书算是经典之作。以通俗的语言告诉我们如何选择书籍?究竟要以什么方法来阅读一本书?
我将自己学到的分享出来。希望能帮助大家提高阅读速度,把书籍读得更加明白,记得更牢固。
1.为什么要阅读?在进入本文主题之前,我们先思考一个问题 —— 我们为什么要阅读?你可以不必急着回答这个问题,带着问题来往下读。
古人有很多名句鼓励学子多读书,例如宋真宗赵恒的《劝学诗》,其中有我们耳熟能详的语句:
书中自有千种粟书中自有黄金屋书中车马多如簇书中自有颜如玉
由此可见,阅读是手段。我们可以通过读书来获得赖以谋能的技能。
那么问题来了?我们要阅读什么书?随便阅读一本书就能获取知识吗?
答案是否定的。
所以我们要读好书,还要掌握些阅读的技巧。
2.阅读什么书?市面上书籍种类琳琅满目。我们该如何选择书籍?先来看看书籍的分类
第一类:如同主食能够解决职业、生活、生理、心理等方面的现实问题的书籍都可以称为“主食”。
“主食”是我们的刚需。所以我们就应该花大量时间去阅读。
举个栗子,假如你是一名 Android 粉丝,想通过学习 Androi ...
Python爬虫入门
未读如果你把上篇多线程和多进程的文章搞定了,那么要恭喜你了 。
你编写爬虫的能力上了一个崭新的台阶。
不过,我们还不能沾沾自喜,因为任重而道远。
那么接下来就关注下本文的主要内容。
本文主要介绍 urllib 库的代替品 —— Requests。
1.Requests 简介引用 Requests 官网的说明:
Requests is the only Non-GMO HTTP library for Python, safe for human consumption.
Requests 官方的介绍语是多么霸气。之所以能够这么霸气,是因为 Requests 相比 urllib 在使用方面上会让开发者感到更加人性化、更加简洁、更加舒服。
并且国外一些知名的公司也在使用该库,例如 Google、Microsoft、Amazon、Twitter 等。
因此,我们就更加有必要来学习 Request 库了。
在学习之前,我们来看下它究竟具有哪些特性?
具体如下:
Keep-Alive & 连接池
国际化域名和 URL
带持久 Cookie 的会话
浏览器式的 SSL 认证
自动内容 ...
Python爬虫入门
未读
前言:为什么有人说 Python 的多线程是鸡肋,不是真正意义上的多线程?
看到这里,也许你会疑惑。这很正常,所以让我们带着问题来阅读本文章吧。
问题:1、Python 多线程为什么耗时更长?2、为什么在 Python 里面推荐使用多进程而不是多线程?
1.基础知识现在的 PC 都是多核的,使用多线程能充分利用 CPU 来提供程序的执行效率。
1-1.线程线程是一个基本的 CPU 执行单元,它必须依托于进程存活。
一个线程是一个execution context(执行上下文),即一个 CPU 执行时所需要的一串指令。
1-2.进程进程是指一个程序在给定数据集合上的一次执行过程,是系统进行资源分配和运行调用的独立单位。
可以简单地理解为操作系统中正在执行的程序。也就说,每个应用程序都有一个自己的进程。
每一个进程启动时都会最先产生一个线程,即主线程。然后主线程会再创建其他的子线程。
1-3.两者的区别
线程必须在某个进行中执行。
一个进程可包含多个线程,其中有且只有一个主线程。
多线程共享同个地址空间、打开的文件以及其他资源。
多进程共享物理内存、磁盘、打印机以及其他资源。
1- ...
Python爬虫实战
未读我们已经学习 urllib、re、BeautifulSoup 这三个库的用法。
但只是停留在理论层面上,还需实践来检验学习成果。
因此,本文主要讲解如何利用我们刚才的几个库去实战。
1.确定爬取目标任何网站皆可爬取,就看你要不要爬取而已。本次选取的爬取目标是当当网,爬取内容是 以 Python 为关键字搜索出来的页面中所有书籍的信息。
具体如下图所示:
本次爬取结果有三项:
图书的封面图片
图书的书名
图书的链接页面最后把这三项内容保存到 csv 文件中。
2.爬取过程众所周知,每个站点的页面 DOM 树是不一样的。
所以我们需要先对爬取页面进行分析,再确定自己要获取的内容,再定义程序爬取内容的规则。
2-1.确定 URL 地址我们可以通过利用浏览器来确定URL 地址,为 urllib 发起请求提供入口地址。
接下来,我们就一步步来确定请求地址。
搜索结果页面为 1 时,URL 地址如下:
搜索结果页面为 3 时,URL 地址如下:
搜索结果页面为 21 时,即最后一页,URL 地址如下:
从上面的图片中,我们发现 URL 地址的差异就在于 page_index 的值, ...