基于Python的豆瓣读书网站用户信息采集

2019-05-23 10:44李鑫欣关菁华
电脑知识与技术 2019年8期
关键词:网络爬虫数据采集

李鑫欣 关菁华

摘要:21世纪是大数据时代。随着互联网的发展与普及,人们在互联网上会留下大量的“个人信息足迹”。网络数据量呈指数级增长,与此同时人们获取想要的信息的难度也大幅度提高。搜索引擎的出现和发展提高了用户检索信息的效率。网络爬虫是搜索引擎相关技术的重要组成部分,爬虫技术的发展助推信息资源获取更加高效便捷。基于Python技术对目标网站——豆瓣网用户读书喜好信息(包括用户想读、在读、读过、评论等)进行采集与存储,为后期的个性化推荐方法研究提供数据支持。在数据采集过程中涉及URL去重、模拟登录、翻页等技术处理。

关键词:Python;网络爬虫;数据采集;模拟登录;URL去重

中图分类号:TP393 文献标识码:A

文章编号:1009-3044(2019)08-0004-03

Gathering Douban Users Reading Preference Information Based on Python Technology

LI Xin-xin, GUAN Jing-hua

(Dalian University of Foreign Languages, Dalian 116044, China)

Abstract: The 21st century is a big data era. With the development and popularization of the Internet, people will leave a large number of "personal information footprints" on the Internet. The amount of network data is increasing exponentially; meanwhile, it has become more difficult to obtain the desired information, but the emergence and development of search engines has improved the efficiency of information retrieval. Web crawler technology, an important component of related search engine technology, is of great significance to research. Based on Python technology, this paper aims to collect and store Douban users reading preference information (including books users want to read, is reading, have read, and have commented on, etc.), and provide data support for the later research of personalized recommendation methods. URL deduplication, analog login, page turning and other technical processing are involved in the process of data acquisition.

Key words: Python; web crawler; data acquisition; simulation login; URL deduplication

1 背景

21世紀是大数据时代,同时也是人工智能浪潮兴起的时代。由于移动终端、互联网以及无处不在的传感器和微处理器的存在,人们无时无刻不留下“数据足迹”。[1]随着互联网相关技术的不断发展,互联网用户数量激增,互联网产品种类多、应用范围广,几乎覆盖了人们生产生活中的每一个重要部分。互联网上含有超过16亿的网站,[2]而这些被索引的网站包含至少217亿的页面。[3]信息产业日益发达,使得人们意识到对于海量数据的挖掘与采集具有重要意义。人们在生产生活中会产生大量的数据,将这些数据加以利用又可以更好地服务于人们的生产生活。作为中国最早的web2.0网站之一,豆瓣网以其人性化操作,个性化网站设计和特有的文化特色为亮点,充分利用web2.0的人性化特色,获得了很多互联网用户的支持与青睐。[4]豆瓣网从2005年3月6日正式上线了发展至今,为用户提供了多方面的信息服务,包括读书、电影、音乐、小组、同城、FM、时间、豆品等,深受互联网用户的喜爱。早在2012年豆瓣的月度覆盖独立用户数已超过1亿,日均PV(page view)为1.6亿。豆瓣网站的用户量巨大,因此对于该网站的用户行为信息的采集具有研究意义。本项目以豆瓣读书网站作为书籍采集目标平台,对网站用户的读书喜好相关数据进行采集,其中包括用户想读书籍、在读书籍、读过书籍以及书籍短评详细信息。程序以豆瓣网站任意一个用户为切入点,采用广度优先的爬取策略,实现数据采集目标。

2 网络爬虫概述

2.1 网络爬虫原理

网络爬虫是一种自动抓取网页并提取网页内容的程序,是搜索引擎的信息获取渠道。[5]我们可以把互联网比作一张大网,而网络爬虫就是在网上爬行的蜘蛛。把网的节点比作一个个网页,爬虫爬到这就相当于访问了该页面,获取了其信息。可以把节点之间的连线比做网页与网页之间的连接关系,这样蜘蛛通过一个节点后,可以顺着节点连线继续爬行到达下一个节点,即通过一个网页继续获取后续的网页,这样整个网的节点便可以被蜘蛛全部爬行到,网站的数据就会被抓取下来了。[6]

2.2 网络爬虫现状分析

网络爬虫技术发展至今,研究人员已经为我们提供了许多开源库与框架供我们学习和使用。近年来,网络爬虫技术发展迅速,研究人员在原有技术的基础上不断地对程序进行优化与发展。目前知识版权的概念正在深入人心,网站网页作为内容的载体,其所保存的信息也属于知识产权的范畴,理应受到版权协议的保护。所以有相当数量的网页并不希望其出产的内容被网络爬虫轻松地探测到并下载。[7]

因此,许多网站对于网络爬虫行为采取一定的限制措施,阻拦IP地址单位时间内对于网站服务器的访问次数。如果爬虫程序使用不当,有可能会承担一定的法律风险。

3 爬虫程序设计

本次项目的研究对象为豆瓣网站。从网站上任意一个豆瓣用户入手,对此用户的一度关注用户以及二度关注用户的读书喜好信息进行采集,包括想读、在读、读过、书评涉及的数据详细信息。

研究思路:

1)在豆瓣读书网站上随机找一位用户,要求他的个人主页中有一定的关注人和读书喜好信息。找到符合要求的人作为我们的目标用户,将目标用户的URL(Uniform Resource Locator )保存下来。

2)爬取策略选择。常见的网页抓取策略采用广度优先算法和深度优先算法。简单来说,广度优先算法是从开始节点出发,尽可能广地搜索与之距离较近的其他节点;而深度优先算法则侧重于尽可能深地搜索与之距离较远的节点。针对自身程序特点以及对目标数据的需求分析,选择合适的优先算法会提高程序运行效率。本次程序设计,在考虑多用户之间的相关性问题,采取广度优先算法进行程序设计。在尽可能多地采集用户一度关注用户的主页链接后,再对用户二度关注用户信息进行采集。

3)根据目标用户的URL,使用基于Python语言的网络爬虫技术,将该用户的所有关注人信息存取下来,包括用户的豆瓣网主页名以及URL信息,作为本次项目的一度关注用户;通过同样的方式,将一度关注用户的关注人信息采集下来,作为项目的二度关注用户。将以上涉及的豆瓣用户信息存入到MongoDB数据库中。

4)从数据库中读取豆瓣用户的主页链接,以一个用户为单位,使用Python程序模拟登录浏览器获得用户的读书喜好信息,包括想读、在读、读过和书评中的书名与书籍链接。

5)将目标用户、一度关注用户和二度关注用户读书喜好信息中涉及的所有图书进行详细信息采集并保存。

4 爬虫程序实现

1)从网页中获取用户关注人信息并存入MongoDB数据库:本次研究选用豆瓣用户读库作为目标用户(URL:https://www.douban.com/people/19743667/),它符合我们的研究条件,有读书喜好信息与评论等信息。在获取读库关注人信息之前,需要使用正确的网站账号与密码登录网站才能查看。这里我们使用Python语言对豆瓣网站进行模拟登录:首先,设置User-Agent,这是网站设置反爬虫最基本的机制;其次要设置好data,在登录的过程中会涉及表单的提交,我们需要将豆瓣账号以及相应的账号密码等信息填入,以便通过代码正确登录豆瓣网站,最后设置一个函数用来处理网站的验证码问题。在处理好豆瓣网站模拟登录的问题之后,在网站中点击“关注人”选项,发现用户关注人的详细信息都存储在“读库”主页链接尾部加上“contact”的网址下,通过查看该网址的页面源代码,准确地找到存储信息的位置。使用requests模块对读库的关注人页面的源代码进行解析,使用find_all()方法定位到所有用户名和用户主页链接的位置并存储下来。

2)根据用户主页链接采集用户读书喜好信息并保存:保存在数据库中的豆瓣用户主页链接会出现URL重复的问题。例如,某用户既是一度关注用户也是二度关注用户,所以我们在采集用户喜好信息之前需要对存储下来的用户主页链接进行去重处理,提高程序采集效率:将采集多信息的用户的主页链接存储下来,采集下一个用户的主页链接之前先判断该网址是否存储过,如果已经采集过信息,则舍弃当前链接,继续从数据库中读取下一条用户主页链接;否则,根据用户主页链接,查找并存储用户的读书喜好信息。用户主页链接与实际该用户存储书籍喜好链接不一致,以我们的目标用户读库为例:读库的主页链接为https://www.douban.com/people/19743667/,而读库读书喜好链接为https://book.douban.com/people/19743667/,因链接不同,所以在采集读库信息时,要进行字符串的替换操作。将“www”替换为“book”,以保证程序正确运行,采集到我们需要的详细读书喜好信息。书籍详细信息采用同樣原理。

3)延时等待:在程序运行的过程中,要考虑到不要因为自己的数据爬取程序给对方的服务器造成压力,所以在每段程序运行时都加入适当的延时等待处理。礼貌爬行,以免频繁访问给网站带来过度负载。[8]

4)翻页处理:在数据采集中,我们若想对数据进行全面、完整地采集,需要在设计网络爬虫程序时考虑到模拟翻页的功能。观察网站的链接变化规律,通过更改链接尾部信息可实现翻页操作,以采集用户在读信息为例,部分代码如下:

for i in range(0,10):

URL=URL_do+do?start=+str(i*15) #URL_do 为用户在读书籍主页链接

5)数据存储:随着大数据的发展,数据内容的多样性带动了非结构化存储数据的发展。[9]MongoDB是NoSQL存储结构下的文档型数据库,由C++语言编写。MongoDB最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。本项目使用MongoDB存储用户的一度关注用户和二度关注用户的主页链接。XML作为半结构化的语言,因其能预先定义标记等优势被普遍应用于非结构化到结构化的信息转换中。[10]XML文件使用纯文本语言编写,且语法简单,便于读者理解与学习。Python语言自身提供了对XML文件进行操作的模块,简化信息存取操作,提高程序运行效率。因此我们使用XML文件格式存储用户的读书信息。以单个用户为单位进行读书信息存储。每个XML文件中包括该用户的主页链接、用户名,想读、在读、读过书籍的名称以及链接、用户的评论信息(评论书籍名称、链接、评论内容)。

5 结束语

Python语言语法简洁,功能强大,具有丰富的标准库。本文探讨了基于Python的豆瓣网站用户相关信息采集程序的设计与实现。通过模拟用户登录豆瓣网站进行指定用户的读书喜好相关信息采集并保存至本地。为后续的数据分析提供数据支持。本文探讨的程序具有针对性强、操作简单等优点。在今后的学习中将会根据所学知识进一步优化爬虫程序。

参考文献:

[1] 任龙龙. 大数据时代的个人信息民法保护[D]. 北京: 对外经贸大学, 2017.

[2] Netcraft. There are over 1.6 billion Websites in the World Wide Web(WWW)[EB/OL]. [2008-03-28]. http://it.hexun.com/2008-03-28/104849372.html.

[3] The indexed web contains at least 21.7 billion pages[EB/OL]. [2009-11-11]. http://www.worldwidewebsize.com/index.php?lang=EN.

[4] 虞璐. Web2.0时代豆瓣网的网络文化研究[D]. 南京: 南京师范大学, 2012.

[5] 于娟, 刘强. 主题网络爬虫研究综述[J]. 计算机工程与科学, 2015, 37(2).

[6] 崔庆才. Python3 网络爬虫开发实战[M]. 北京: 人民邮电出版社, 2018: 93.

[7] 安子建. 基于Scrapy框架的網络爬虫实现与数据抓取分析[D]. 长春: 吉林大学, 2017.

[8] 于娟, 刘强. 主题网络爬虫研究综述[J]. 计算机工程与科学, 2015, 37(2).

[9] 李纪伟, 段中帅, 王顺晔. 非结构化数据库MongoDB的数据存储[J]. 电脑知识与技术, 2018, 14(27): 7-9.

[10] 杨晶, 周双娥. 一种基于XML的非结构化数据转换方法[J]. 计算机科学, 2017, 44(S2): 414-417.

【通联编辑:谢媛媛】

猜你喜欢
网络爬虫数据采集
炼铁厂铁量网页数据获取系统的设计与实现
基于开源系统的综合业务数据采集系统的开发研究