APP下载

基于Python 的网络爬虫技术

2020-09-11四川水利职业技术学院赵文杰古荣龙

河北农机 2020年8期
关键词:爬虫网页页面

四川水利职业技术学院 赵文杰 古荣龙

随着互联网技术的快速发展和大数据时代的到来,网络数据呈爆炸式的发展,如何从海量的数据中快速高效地提取用户感兴趣的Web 信息,在大数据处理中面临着巨大的挑战。虽然目前通过搜索引擎可以满足日常基本的需求,但对特定的内容不能进行集中处理和可视化展示。另外,手动搜索的效率低,对数据选取的时间成本较高。网络爬虫技术可以很好地解决这种问题,自行定制规则选取特定内容,可以让我们更精准地获取有效数据。同时网络爬虫可以根据网页内容进行深度和广度搜索,实现自动化运行[1]。

1 爬虫技术

网络爬虫,是按照设定的规则自动抓取网络信息的程序。网页中包含了文字信息、超链接信息。从功能上来讲,爬虫的处理过程一般包括数据采集、处理、储存三个部分。在网络爬虫的系统框架中,主过程由控制器、解析器、资源库三部分组成。控制器的主要工作是负责给多线程中的各个爬虫线程分配工作任务。解析器的主要工作是下载网页,进行页面的处理,主要是将一些JS 脚本标签、CSS 代码内容、空格字符、HTML 标签等内容处理掉,爬虫的基本工作由解析器完成。资源库用来存放下载到的网页资源,一般都采用大型的数据库存储[2]。

网络爬虫技术分为以下几类:通用网络爬虫、聚焦网络爬虫、增量网络爬虫、深层网络爬虫[3]。这几种爬虫的关键技术是类似的。爬虫获取网络数据的方式:模拟浏览器发送请求,获取网页代码——提取有用数据,解析内容,保存数据。

2 Python 简述

Python 是一种解释型、面向对象、动态数据类型的高级程序设计语言。它是解释型语言,但是也可以编译成.pyc 跨平台的字节码文件。.pyc 文件有几个好处:一是可以简单地隐藏源码,二是提高载入速度,三是跨平台。相较于C++、Java 语言,Python 更易于学习,有一个广泛的标准库。同时可以结合Java 或C/C++语言,封装成Python 可以调用的扩展库,便于扩展和移植。Python 提供了非常丰富的针对网络协议的标准库,能简单高效地进行网页抓取、网页解析、数据存储等,使程序员可以集中精力处理程序逻辑[4]。

3 爬虫案例

本文通过Python 语言来实现一个简单的聚焦型爬虫,爬取当当网上的图书信息,将图书的封面图片,图书书名、图书链接页面保存在本地csv 文件中。本文在Python3.6 环境下调试完成。

该系统主要由三个方面构成。第一,Url 管理器,负责提取网络的url 地址。第二,网页下载器,从网络上下载网站内容,获取页面中详细信息;第三,页面解析器,针对网页下载器中的信息,提取目标信息;第四,数据存储器,完成数据持久化。

具体实现过程如下:

(1)打开当当网页面,搜索关键字“Python”,结果如图1 所示。

图1 搜索结果图

(2)分析源代码,可利用开发者工具查看每个数据对应的元素及class 名称,如图2 所示。

图2 网页源代码

(3)对网页进行解析,可以使用正则表达式、BeautifulSoup、lxml 等多种方式来解析网页,每种方法各有特色,使用时结合实际需要选择一种适合的解析方法。

#导入程序需要的库

import urllib.request

import time

import csv

import codecs

from bs4 import BeautifulSoup

#打开网页,输入关键字”python”

图3 保存在csv 文件中的数据

#爬取地址,当当Python 的书籍太多,我们只爬取前20 页的信息

url="http://search.dangdang.com/?key=python&act=input&s how=big&page_index="

#请求头

headers={'

User-Agent':'Mozilla/5.0 (Windows NT 6.1;Win64;x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'

}

index=1

while index<=20:

#发起请求

request = urllib.request.Request (url=url+str (index),headers=headers)

response=urllib.request.urlopen(request)

index=index+1

#通过BeautifulSoup 的find_all 方法解析页面

soup=BeautifulSoup(response)

temps=soup.find_all('a',class_='pic')

global books

books=books+temps

(4)数据持久化,将爬取的数据保留在本地。数据存储的方式方法有多种,可以保留在普通文件中,如txt、csv 等。也可以存储在数据库中,如MySQL。本文将爬取到的数据写入csv 文件,结果如图3 所示。代码如下:

file_name='PythonBook.csv'

#指定编码为utf-8,避免写csv 文件出现中文乱码

with codecs.open(file_name,'w','utf-8')as csvfile:

filednames=['书名','页面地址','图片地址']

writer=csv.DictWriter(csvfile,fieldnames=filednames)

writer.writeheader()

for book in books:

if len(list(book.children)[0].attrs)==3:

img=list(book.children)[0].attrs['data-original']

else:

img=list(book.children)[0].attrs['src']

try:

writer.writerow({' 书名':book.attrs['title'], ' 页面地址':book.attrs['href'],'图片地址':img})

except UnicodeEncodeError:

print("编码错误,该数据无法写到文件中")

4 结语

本文介绍了基于Python 的网络爬虫技术的工作流程,以实际案例演示了当当网数据的爬取过程。现在已经进入大数据时代,网络爬虫技术具有极高的实际应用价值,作为一种自动收集数据的手段,在各行各业都有广泛的应用。同时也能为后续数据处理、数据分析做好准备。

猜你喜欢

爬虫网页页面
利用网络爬虫技术验证房地产灰犀牛之说
刷新生活的页面
答案
基于Python的网络爬虫和反爬虫技术研究
基于HTML5与CSS3的网页设计技术研究
让Word同时拥有横向页和纵向页
基于CSS的网页导航栏的设计
基于HTML5静态网页设计
大数据背景下校园舆情的爬虫应用研究
基于URL和网页类型的网页信息采集研究