基于大数据技术网络爬虫自动抓取图书信息

(整期优先)网络出版时间:2020-12-28
/ 3

基于大数据技术网络爬虫自动抓取图书信息

戚宝德

武汉学院 ,信息工程学院 湖北武汉 430212


摘要:本文通过使用Python的相关模块,基于大数据开发一个网络爬虫设计,实现从某图书网站自动下载感兴趣的图书信息的功能。包括单页面图书信息下载,图书信息抽取,多页面图书信息下载等。

关键词:网络爬虫、信息抽取、内容解析

基金资助:资助项目(新一代信息技术创新项目,课题编号2018A02016)

0引言

网络爬虫是一种从互联网上进行开放数据采集的重要手段。本文通过使用Python的相关模块,开发一个简单的爬虫设计,实现从某图书网站自动下载感兴趣的图书信息的功能。主要实现的功能为单页面图书信息下载,图书信息抽取,多页面图书信息下载等。基于人工智能技术研发的新一代采集模式,操作极其简单,只需要输入被采集的网址就能智能识别出网页中的内容和分页按钮,无需配置采集规则就能够完成数据的采集。

2004年以来,Google在它的应用程序中成功地使用了AJAX技术,如Google讨论组、Google地图、Gmail等。同时由于该技术支持Mozilla/Geck。,而被各大网站相继采用。各种异步交互网络框架如GWT、AtlaS、Doj。也应运而生。但随之而来的却是新的问题:由于AJAX框架网站是构建在异步JavascriPt基础上的Web应用技术,而传统Web搜索引擎中网络爬虫(WebCrawler)并不能解决异步交互网络中的Web地址(URL)提取。一方面是大量基于AJAx的网站正在不断的涌现,另一方面这些网站的URL被搜索引擎忽略,这意味着越来越多有意义的数据将无法通过搜索引擎检索。这一问题,也引起了国内外学者的广泛关注:研究异步交互网络的地址解析方法对互联网领域的技术理论发展和应用有重要意义。

1任务描述和数据来源

前段时间在图书馆借了很多书,借得多了就容易忘记每本书的应还日期,老是担心自己会违约,影响日后借书,而自己又懒得总是登录到学校图书馆借阅系统查看,于是就打算写一个爬虫来抓取自己的借阅信息,把每本书的应还日期给爬下来,并写入txt文件,这样每次忘了就可以打开该txt文件查看,每次借阅信息改变了,只要再重新运行一遍该程序,原txt文件就会被新文件覆盖,里面的内容得到更新。详细介绍一下智能模式的基本操作流程。

1.1涉及的技术:  

  Python版本是 2.7 ,同时用到了urllib2、cookielib、re三个模块。urllib2用于创建请求(request),并抓取网页信息,返回一个类似于文件类型的response对象;

cookielib用于储存cookie对象,以实现模拟登录功能;re模块提供对正则表达式的支持,用于对抓取到的页面信息进行匹配,以得到自己想要的信息。

创建智能模式任务,输入了正确的网址,这个采集任务就成功了一半。从当当网搜索页面,按照关键词搜索,使用Python编写爬虫(如图1),自动爬取搜索结果中图书的书名、出版社、价格、作者和图书简介等信息。当当搜索页面:http://search.dangdang.com/

5fe94e0dd3c61_html_4c59efa9ef9d27bc.png

图1网络爬虫自动抓取过程

2、单页面图书信息下载

2.1 网页下载

采集支持单网址和多网址采集,支持从本地TXT文件中导入网址,也支持参数网址批量生成。Python中的 requests 库能够自动帮助我们构造向服务器请求资源的request对象,返回服务器资源的response对象。如果仅仅需要返回HTML页面内容,直接调用response的text属性即可。在下面的代码中,我们首先导入requests库,定义当当网的搜索页面的网址,设置搜索关键词为"机器学习"。然后使用 requests.get 方法获取网页内容。最后将网页的前1000个字符打印显示。

导入requests 库test_url = 'http://search.dangdang.com/?key='+ '机器学习',设置网页的URL地址content_page = requests.get(test_url).text ,执行页面请求,返回页面内容print(content_page[:1000]),将页面的前1000个字符打印显示出来。

2.2 图书内容解析

接下来开始做页面的解析,分析源码.使用Chrome浏览器直接打开网址http://search.dangdang.com/?key=机器学习 。然后选中任意一本图书信息,鼠标右键点击“检查”按钮。不难发现搜索结果中的每一个图书的信息在页面中为

标签,点开第一个标签,发现下面还有几个

标签,且class分别为"name"、"detail"、"price"等,这些标签下分别存储了商品的书名、详情、价格等信息。

以书名信息的提取为例进行具体说明。点击 li 标签下的 class属性为 name 的 p 标签,我们发现书名信息保存在一个name属性取值为"itemlist-title"的 a 标签的title属性中。可以使用xpath直接描述上述定位信息为 //li/p/a[@name="itemlist-title"]/@title 。再用 lxml 模块来提取页面中的书名信息。xpath的使用请参考 

https://www.w3school.com.cn/xpath/xpath_syntax.asp 。

导入etree模块page = etree.HTML(content_page) #将页面字符串解析成树结构book_name = page.xpath('//li/p/a[@name="itemlist-title"]/@title') #用xpath提取出书名信息。book_name[:10] #打印提取出的前10个书名信息。同理,我们可以提取图书的出版信息(作者、出版社、出版时间等),当前价格、星级、评论数等更多的信息。这些信息对应的xpath路径如下表所示。

信息项

xpath路径

书名

//li/p/a[@name="itemlist-title"]/@title

出版信息

//li/p[@class="search_book_author"]

当前价格

//li/p[@class="price"]/span[@class="search_now_price"]/text()

星级

//li/p[@class="search_star_line"]/span[@class="search_star_black"]/span/@style

评论数

//li/p[@class="search_star_line"]/a[@class="search_comment_num"]/text()

下面我们编写一个函数 extract_books_from_content,输入一个页面内容,自动提取出页面包含的所有图书信息。

2.3 图书数据存储

上一小节我们已经成功从网页中提取出了图书的信息,并且转换成了 DataFrame 格式。可以选择将这些图书信息保存为 CSV 文件,Excel 文件,也可以保存在数据库中。这里我们使用 DataFrame 提供的 to_csv 方法保存为CSV文件。

books_df.to_csv("./input/books_test.csv",index=None)

3、多页面图书信息下载

观察搜索页面最底部,输入一个关键词,通常会返回多页结果,点击任意一个页面按钮,然后观察浏览器地址栏的变化。我们发现不同页面通过浏览器URL中添加 page_index 属性即可。例如我们搜索"机器学习"关键词,访问第10页结果,则使用以下URL:http://search.dangdang.com/?key=机器学习&page_index=10

假设我们一共希望下载10页内容,则可以通过以下代码实现。

import timekey_word = "机器学习" #设置搜索关键词max_page = 10 #需要下载的页数books_total = []for page in range(1,max_page+1):

url = 'http://search.dangdang.com/?key=' + key_word + "&page_index=" + str(page) #构造URL地址

page_content = requests.get(url).text #下载网页内容

books = extract_books_from_content(page_content) #网页图书信息解析

books_total.extend(books) #将当前页面的图书信息添加到结果列表

print("page " + str(page) +", "+ str(len(books)) + " books downloaded." )

time.sleep(10) #停顿10秒再下载下一页

page 1, 60 books downloaded.

page 2, 60 books downloaded.

page 3, 60 books downloaded.

page 4, 60 books downloaded.

page 5, 60 books downloaded.

page 6, 60 books downloaded.

page 7, 60 books downloaded.

page 8, 60 books downloaded.

page 9, 60 books downloaded.

page 10, 60 books downloaded.

转换成DataFrame格式。

books_total_df = pd.DataFrame(data=books_total, columns=["书名","出版信息","当前价格","星级","评论数"])随机抽样5个图书显示。

4 总结和展望

借助Python的 requests, lxml, Pandas等工具,我们已经实现了一个简单的网络爬虫。能够从当当网按照关键词搜索图书,将图书信息页面下载,并从页面中解析出结构化的图书信息。最后将解析出的图书信息保存为了CSV格式的文件。分析了当前主题爬虫在面向BT种子文件获取应用上存在的问题,从提高BT种子获取速率、提高覆盖率和降低种子获取延时的角度出发,提出了基于Hash的去重机制,给出了爬虫自动登录的实现方法,设计了AJAX页面解析引擎,提出批量抓取和增量抓取相结合的数据抓取机制、历史数据和更新数据相结合的数据存储机制。通过设计并实现一个基于爬虫方式的BT种子文件获取系统证明了这几种方法能使系统整体性能平均提高30%~50%。这些技术和方法也可应用于其他主题爬虫。



参考文献:

[1]信息管理系统自动巡检平台设计与实现,承春明;赵欣慧电力信息与通信技术;王建军;孟世斌;赵东坡2020-09-25

[2]基于微信和网络爬虫的高校信息服务平台分析与设计,刘欣,重庆师范大学2016-04-01

[3]面向BitTorrent种子文件获取的网络爬虫技术研究︰苏马婧;叶麟;史建焘;智能计算机与应用;2013-06-01

[4]面向政府的网络信息自动抓取的系统设计与实现;杨慧慧;复旦大学,2010-10-16


戚宝德,男,湖北省黄冈市, 1999年,武汉学院信息系,现阶段研究方向是前端开发