1、爬虫技术
1.1爬虫的分类
1.1 通用型爬虫该爬虫又称为全网爬虫,主要用在搜索 引擎,从初始的 URL 到全网页面,但需要的 存储容量大,速度要求快,工作性能强大。
1.2 聚焦型爬虫
该爬虫专注某一方面,只搜索事先定义 的关键信息。
1.3 增量型爬虫
每隔一段时间更新,重新爬取,更新数 据库。
1.4 深层爬虫
该爬虫一般需要登录提交数据,才能进入页面提取信息。
2、Python概述
Python 具有丰富的标准库和强大的第三方库。它常被昵称为胶水语言,能够和其他语言制作的各种模块(尤其是 C/C++)很轻松地联结在一起,易于扩展。常见的一种应用情形是,使用 Python 快速生成程序的原型(有时甚至是程序的最终界面),然后可以用更合适的语言改写其中有特别要求的部分,比如对于性能要求特别高的 3D 游戏中的图形渲染模块,完全可以用 C/C++ 重写封装为 Python 可以调用的扩展类库。在使用之前,必须搭建好使用环境。到Python 官网下载针对用户所使用的操作系统
Python 版本来安装,安装完成后需要设置环境变量便于启动 Python。同时可选择一款合适的编辑工具来完成爬虫的编写。
目前 Python 的版本有 2.X 和 3.X。两者
主要在语法、编码、性能、模块上有些不同。
使用 Python 开发爬虫的优点:
(1)语言简洁,使用方便。
(2)提供功能强大的爬虫框架。
(3)丰富的网络支持库及网页解析器
3、爬虫案例
( 1 ) Where :爬哪里,确定要抓取的页面。解决这个问题由用户对数据的需求来决定。
( 2 ) What :爬什么,分析上述页面,确定从页面中爬取的数据。
( 3 ) How :怎么爬,可使用 Python 强大丰富的标准库及第三方库来完成。这是爬虫的核心部分。尤其是对网页的解析,可使用正则表达式、 BeautifulSoup 、 lxml 来解析网页,三种方法各有千秋,使用时可根据用户的熟练程度和需要选择一种适合的解析方法。
3.2 具体实施
该爬虫系统主要由三个模块:页面抓取模块、页面分析模块、数据存储模块,三个模块之间相互协作,共同完成网页数据的抓取。
( 1 )爬虫实现流程如图 1 所示。
( 2 )打开某信息网招聘信息,该网站 URL 是爬虫主要的处理对象,打开互联网职位页面并分析网页源代码结构,代码如图 2 所
示。
分析代码过程中,可利用开发者工具确定每个数据对应的元素及 Class 名称。例如本页面的公司名称、职位、薪水对应的元素及
Class 如表 1 所示。
( 3 )确定爬虫方法,导入程序中所用到的库。对服务器发出请求,打开网页,需要使用 requests 库,本爬虫中分析网页使用的是 BeautifulSoup 方式,需要用到 BeautifulSoup 库,存储数据用到库 xlwt ,整个爬虫程序中用到的库都需要导入。部分代码及注释( # 开始为注释行)为如下:
# 导入程序中所用到的库
import requests
from bs4 import BeautifulSoup
import xlwt
# 打开网页
r=requests.get(link,headers=headers)
# 通过 BeautifulSoup 的 find_all 方法解析
页面
soup=BeautifulSoup(r.text,"lxml")
job_list=soup.find_all('li',class_="job_
itemclearfix")
# 查找公司名称、职位、薪水等信息
for job in job_list:
comp=job.find('div',class_='comp_name').
text.strip()
name=job.find('span',class_='name').text.
strip()
salary=job.find('p',class_='job_salary').text.
strip()
(4)爬取结果,本地保存。爬虫从网页中提取数据后,需要将数据保存下来, Python提供存储数据的方法:可保存到文件中(包括TXT 文件和 XLS 文件),也可存储在数据库中(包括 MySQL 关系数据库和 MongoDB 数据库)。该爬虫对招聘信息进行本地保存,存储格式为 .XLS 文件。部分代码如下:# 创建 Excel 文档保存将要爬取的数据
book=xlwt.Workbook(encoding='utf-8')
sheet1=book.add_sheet(u'sheet1',cell_
overwrite_ok=True)
# 在创建好的 Excel 文档中写入信息标题
heads=[u' 公司名称 ',u' 职位 ',u' 薪水 ']
ii=0
for head in heads:
sheet1.write(0,ii,head)
ii+=1
# 调 用 write 方 法 将 查 找 到 的 信 息 写 入
Excel 文档中
for data in (comp,name,salary):
sheet1.write(i+1,0,comp)
sheet1.write(i+1,1,name)
sheet1.write(i+1,2,salary)
i+=1
# 保存 Excel 文档
book.save('joblist.xls')
保存结果如图 3 所示。
可以看到和网页中提供的招聘信息是一
致的。
3.3 改进和完善上述爬虫只能爬取网页上的第一页招聘信息,如果需要爬取所有页面信息,可根据分析网页 URL 地址的规律,使用 for 循环爬取。分析比较:
0 d 3 0 3 6 5 5 - 0 0 2 e - 4 9 6 4 - f 9 0 b -
fa2a1cb1f628&ClickID=3
0 d 2 0 2 4 0 8 - 0 0 2 e - 4 6 b c - d 2 a 9 -
36b62fb6175b&ClickID=2
到下一页 ClickID 的值增加 1, 需重新构造
URL。
部分代码如下:
fori in range(0,10):
link1=link+str(i)