内容正文:
《Python应用程序设计》
8.1 网络爬虫
1
网络爬虫的基本流程
1
网络爬虫库
2
网络爬虫框架
3
目录
使用网络爬虫框架的基本步骤
4
2
网络爬虫的基本流程
1
1.发起请求
通过HTTP库向目标站点发起请求,也就是发送一个Request,请求可以包含额外的header等信息,等待服务器响应。
2.获取响应内容
如果服务器能正常响应,会得到一个Response,Response的内容便是所要获取的页面内容,类型可能是HTML、Json字符串、二进制数据(图片或者视频)等类型。
网络爬虫的基本流程
1
3.解析内容
得到的内容如果是HTML,可以用正则表达式,页面解析库进行解析;如果是Json,可以直接转换为Json对象解析;如果是二进制数据,可以保存或者进一步的处理。
4.保存数据
保存形式多样,可以存为文本,也可以保存到数据库,或者保存特定格式的文件。
网络爬虫库
2
requests库是一个Python的第三方库,支持丰富的链接访问功能,包括国际域名和URL获取、HTTP长连接和连接缓存、HTTP会话和cookie保持、文件分块上传、HTTP(S)代理、连接超时处理等功能。
在Windows操作系统中的cmd命令行中要先安装该库,具体命令如下:
:\>pip install requests
网络爬虫库
2
requests库提供的主要函数。
函数 说明
request() 构造一个请求
get() 获取URL位置的资源
head 获取URL位置的头部信息
post 向URL位置提交POST请求
put 向URL位置提交PUT请求
patch 局部更新URL位置的资源
delete 删除URL位置存储的资源
表1 requests库的常见函数
网络爬虫库
2
下面的案例展示了使用requests库以GET请求的方式爬取百度搜索关键词python的网页。
网络爬虫框架
3
Python网络爬虫框架主要包括:Scrapy、Crawley、Portia等。Scrapy是使用Python开发的一个开源的爬虫框架,使用方便用途广泛,可用于爬虫开发、数据挖掘、网络检测和自动化测试等。它提供了URL队列、异步多线程访问、定时访问、数据库集成等多项功能,可以构建产品级的爬虫系统。
在Windows操作系统中的cmd命令行中要先安装该库,具体命令如下。
:\>pip install scrapy
网络爬虫框架
3
1.Scrapy框架中包含的组件
Scrapy的框架主要包含了引擎、调度器、下载器、管道等多个组件。
网络爬虫框架
3
2.Scrapy中的数据流基本过程
(1)引擎打开一个网站,找到处理该网站的Spider并向该Spider请求第一个要爬取的URL(s)。
(2)引擎从Spider中获取到第一个要爬取的URL并在调度器以Request调度。
(3)引擎向调度器请求下一个要爬取的URL。
(4)调度器返回下一个要爬取的URL给引擎,引擎将URL通过下载中间件(请求方向)转发给下载器。
网络爬虫框架
3
2.Scrapy中的数据流基本过程
(5)一旦页面下载完毕,下载器生成一个该页面的Response,并将其通过下载中间件(响应方向)发送给引擎。
(6)引擎从下载器中接收到Response并通过SPIDER中间件(输入方向)发送给Spider处理。
(7)Spider处理Response并返回爬取到的Item及新的Request给引擎。
(8)引擎将(Spider返回的)爬取到的Item给ITEM PIPELINES,将(Spider返回的)Request给调度器。
网络爬虫框架
3
2.Scrapy中的数据流基本过程
(5)一旦页面下载完毕,下载器生成一个该页面的Response,并将其通过下载中间件(响应方向)发送给引擎。
(6)引擎从下载器中接收到Response并通过SPIDER中间件(输入方向)发送给Spider处理。
(7)Spider处理Response并返回爬取到的Item及新的Request给引擎。
(8)引擎将(Spider返回的)爬取到的Item给ITEM PIPELINES,将(Spider返回的)Request给调度器。
使用网络爬虫框架的基本步骤
4
1.新建项目
需要在cmd命令行中进行创建,可以先进入需要创建项目的目录,然后使用命令创建,命令格式如下:
scrapy startproject 项目名称
使用网络爬虫框架的基本步骤
4
2.明确目标
第二步主要是需要明确爬取的目标,完成item.py文件的编写。Item在Scrapy框架中用来定义数据的结构,它的使用方法和字典类似,不过Item相比字典多了额外的保护机制,可以避免拼写错误或者为定义字段错误。
Scrapy框架中提供了scrapy.Item用来表示实体数据。创建Item需要继承scrapy.Item类,并且定义类型为scrapy.Field的类属性。
使用网络爬虫框架的基本步骤
4
3.制作爬虫
(1)创建爬虫
创建爬虫既可以使用命令,也可以自己在spider目录中编写代码实现。下面以使用命令为例来进行说明,命令格式为:
scrapy genspider 爬虫名称 “爬取域”
使用网络爬虫框架的基本步骤
4
3.制作爬虫
(2)运行爬虫
运行爬虫可以在命令方式下进入爬虫文件所在的目录,并执行如下命令:
scrapy crawl 爬虫名称
爬虫名称就是在创建爬虫时确定的系统中唯一的名称。
使用网络爬虫框架的基本步骤
4
3.制作爬虫
(3)提取数据
爬取到网页源代码后,可以使用谷歌、IE等浏览器的工具观察页面的源代码,定位目标数据,分析数据的结构;然后修改爬虫类中parse()方法,将得到的数据封装成对象,再将所有的对象保存在items中。
使用网络爬虫框架的基本步骤
4
3.制作爬虫
(4)存储数据
如果要将爬取到的数据进行永久性存储,需要在运行爬虫的时候增加参数。保存的数据类型有json、jsonl、CSV和xml。例如在命令行中输入如下命令:
scrapy crawl dangdang -o book.xml
则会将输出结果保存为xml文件,使用浏览器打开文件。
任务描述
任务名称:使用requests库以GET请求的方式爬取网页
使用第三方库requests爬取网站“中国铁路12306”的首页,并输出到文件中。
拓展任务
任务名称:使用Scrapy爬虫框架爬取网页信息
创建一个项目Theater,要求爬取国家大剧院的音乐资讯,包括标题、日期和简介,将爬取的信息以XML的方式进行保存。
THANK YOU
21
$$