互联网中包含大量有价值的
数据,网络爬虫通过既定规则可
以自动地抓取互联网数据并下载
至本地存储。研究网络爬虫的工
作原理和基于
Python
网络信息爬
取技术模块功能,基于
Requests-
BeautifulSoup
技
术
构
建
图
片
爬
虫实现网页图片爬取,详细阐述
了
百
度
贴
吧
美
图
吧
图
片
爬
虫
程
序的采集、解析、爬取和存储过
程,实验结果证明基于
Python
的
Requests-BeautifulSoup
技
术
可
快速构建图片爬虫程序实现对网
页图片数据的自动解析和爬取,
程序简单有效并且数据采集速度
快。
摘
要
联网数据的程序或者脚本。网络爬虫通过网
络请求从
Web
网站首页或指定页面开始解析
网页获取所需内容
,
并通过网页中的链接地址
不断进入到下一个网页
,
直到遍历完这个网
站所有的网页或满足爬虫设定的停止条件为
止。
Python
语言第三方网络请求库
Requests
模拟浏览器自动发送
HTTP/HTTPS
请求并从
互联网获取数据。
BeautifulSoup
解析获取的
HTML/XML
页
面
为
用
户
抓
取
需
要
的
数
据,
Beautiful Soup
自动将输入文档转换为
Unicode
编码,将输出文档转换为
utf-8
编码,从而节
省编程时间。
1.1 网络爬虫的工作原理
网络爬虫爬取页面就是模拟使用浏览器
获取页面信息的过程,其爬取流程一般包含如
下
4
个步骤:
(
1
)
模
拟
浏
览
器
发
起
请
求:
通
过
目
标
URL
向服务器发起
request
请求,请求头
header
一般包含请求类型、
cookie
信息以及浏
览器类型信息等;
(
2
)获取服务器页面响应:在服务器正
常响应的情况下,用户会收到所请求网页的
response
,一般包含
HTML
、
Json
字符串或其
他二进制格式数据(如视频,图片)等;
(
3
)获取页面内容解析:用相应的解析
器或转换方法处理获取的网页内容,如用网页
解析器解析
HTML
代码,
如果是二进制数据
(如
视频、图片),则保存到文件进一步待处理;
(
4
)存储数据:网页解析获取的数据可
以用
CSV
、
Json
、
text
、图片等文件存储,也
可以
sqlite
、
MySQL
或者
MongoDB
等数据库
存储。
1.2 Python第三方库Requests模块
Requests
是
用
Python
语
言
编
写
,
使
用
Apache2 Licensed
许
可
证
的
HTTP
库。
Python
标准库中自带的
urllib2
模块和
httplib
模块提
供了所需要的大多数
HTTP
功能,
Requests
使
用
urllib3
模块,支持
HTTP
连接保持和连接
池,
支持使用
cookie
保持会话,
支持文件上传,
支持自动确定响应内容的编码,支持国际化的
URL
和
POST
数据自动编码。
通过
pip
命令(
$pip install requests
)安装
Requests
模块。
urllib
提供了一系列用于操作
URL
的功能,
urllib
的
request
模块可以方便地
访问抓取
URL(
统一资源定位符
)
内容,
urllib.
request
模块中常用的函数方法如表
1
所示。
使用
requests
方法后,会返回一个
response
对
象存储服务器响应的内容,
如
r.status_code
(响
应状态码)、
r.text
(字符串方式的响应体,
会自动根据响应头部的字符编码进行解码)、
r.json
(
Requests
中
内
置
的
JSON
解
码
器)、
r.content
(字节方式的响应体,会自动为你解
码
gzip
和
deflate
压缩)等。
1.3 Python第三方库Beautiful Soup模块
Beautiful Soup
是
用
Python
写
的
一
个
HTML/XML
的解析器,它可以处理不规范标
记并生成分析树
(parse tree)
,同时提供了简单
的
python
函数处理导航(
navigating
)、搜索
并修改分析树。
通
过
pip
命
令
安
装(
$ pip install
beautifulsoup4
)
Beautiful Soup
模
块。
BeautifulSoup
将
HTML
文档转换成一个树形
结构
,
每个节点都是
Python
的对象
,
所有对象
可归纳为
4
种,如表
2
所示。
2 帖吧图片爬虫程序设计
百度贴吧是全球最大的中文社区。贴吧
是一种基于关键词的主题交流社区,贴吧结合
搜索引擎建立一个在线的交流平台,让那些对
同一个话题感兴趣的人们聚集在一起,方便地
展开交流和互相帮助。设计爬虫程序爬取百度
帖吧(
http://tieba.baidu.com
)内的美图吧图片,
运行爬虫程序时提示用户输入想要爬取网站的
url
,爬虫程序修改请求头信息,模拟浏览器对
贴吧内的帖子依次使用
get
请求,进入帖子后
根据规则找到所有图片标签,获取帖子内的图
片资源
url
,并将其依次下载到本地存储
,
所有
帖子爬取完成后按
enter
退出,运行中途也可
以使用
ctrl+c
强制退出程序。
基
于
Python
的
Requests-BeautifulSoup
技
术构建图片爬虫程序,使用
requests
模拟浏览
器请求网页,用
random
生成随机数选取模拟
的浏览器,用
BeautifulSoup
支持的
Python
内
置标准
HTML
解析库解析请求网页返回的数
据,
使
用
urllib.request.urlretrieve( )
下
载
图
片
和各种网络请求。
2.1 爬虫准备
开
发
图
片
爬
虫
程
序
使
用
Python3.6
版
本,
主
要
用
到
了
urllib
的
requests
模
块、
BeautifulSoup
模块和
random
模块,模块是包
含变量、函数或类的定义程序文件,使用模块
前通过
import
导入这些模块。定义了两个全
局变量
null
和
true
并初始化,以避免当访问网
址
url
中出现
null
和
true
字样时,
Python
会将
null
和
true
当成变量未初始化而报错。
import urllib.request
from bs4 import BeautifulSoup
import random
global null #
设置了两个全局变量
null
和
true
并初始化
null=''
global true