176 •电子技术与软件工程 Electronic Technology & Software Engineering中文科技期刊
数据库
数据库技术
leach算法• Data Base Technique
1 概述
根据《中国互联网络发展状况统计报告》,到2018年12月为止,全年新增网民5653万,网民规模达8.29亿,普及率为59.6%,与2017年底相比提升3.8%。互联网的普及使得网上的信息资源呈现爆炸式增长,大数据时代的到来,对如何在短时间内从网页中到用户需要的信息提出了挑战,无论是搜索引擎还是个人或者组织,要获取目标数据,都要从公开网站爬取数据,在这样的需求之下,网络爬虫技术应运而生。 网络爬虫,又被称为网页蜘蛛或者网络机器人,是指按照某种规则从网络上自动爬取用户所需内容的脚本程序。通常情况下,每个网页包含其他网页的入口,网络爬虫可以通过一个网址,链接进入其他网址获取内容,最后返还给广大用户所需要的信息数据。目前最适合用来网络爬虫的编程语言是Python ,Python 语言整合了针对网络爬虫所需要的一系列库,
基于Python 对豆瓣电影数据爬虫的设计与实现
文/裴丽丽
能够高效率得完成爬取目标数据。
2 网络爬虫的实现
最世文化发展有限公司本文以豆瓣网电影模块为例,实现了Python 网络爬虫的全过程,并将爬虫结果保存在本地。主要分四个步骤实现,寻爬虫入口,使用re 和requests 库获得所有电影信息的
url 链接、使用BeautifulSoup 库解析电影
数据、将爬取到的信息保存到本地。2.1 编程环境
Window10操
作
系
统、python3.7、
Pycharm 集成开发环境、谷歌浏览器2.2 寻爬虫入口
豆瓣电影网站与有些网站不同,无法直接在当前页面的网页源码中到我们所需要抓取电影的具体信息,因此需要寻爬虫入口。
通过谷歌浏览器:更多工具->开发者工具->Network->XHR 发现可抓取链接到每部电影的网页movie.douban/j/search_subjects?type=movie&tag=最新& s o r t = r e c o m m e n d & p a g e _limit=20&page_start=0,其中,tag 为查询电影的类型,共有17种类型,本文以热门电影为例进行爬虫的设计与实现;sort 为排序方式;page_limit 为每页显示的电影个数,page_start 为查询电影起始位置。抓取信息时,只需改变tag 及page_start (20的倍数),就可以获取更多的url 链接。具体如图1所示。
2.3 使用re和requests库获取所有电影信息的
url链接
通过import requests 测试程序是否报错,确定安装好requests 库后,通过requests 库提取网页源码,requests 库比urllib 库提取网页源码更简洁,方便开发者使用,只需要几步就可以实现。获得网页源码后,继续通过re 库提取url 链接,图2中,url 链接是"url":"https:\/\/movie.douban\/subject\/27060077\/"这样的形式,该形式不是一个标准的url 链接,需要进行相应的处理,假设当前需要提取100部电
影的信息,具体代码和注释如下:
#导入所需库import requests import re
#page 控制抓取电影的数量page=0while page<=80:
u r l ="h t t p s ://m o v i e.d o u b a n.c o m /j /search_subjects?type=movie&tag=热门
&sort=recommend&""page_limit=20&page_
start="+str(page)
#通过requests 库的get()方法获取源码 r = (url) html = r.text
#通过re 库提取当前页面的url 链接 ree = repile('"url":"(.*?)"', re.S) items = re.findall(ree, html)
for item in items: #对url 形式进行处理 url = place("\\", "") print(url)
图1:url 链接入口
安钢大厦Data Base Technique •
数据库技术
Electronic Technology & Software Engineering 电子技术与软件工程• 177
page+=20
2.4 使用BeautifulSoup库解析电影数据
通过from bs4 import BeautifulSoup 测试程序是否报错,确定安装好BeautifulSoup 库后,通过该库解析电影数据,提取电影的具体信息,进入一部电影,部分网页源代码如图3所示。
如图4,提取该电影的名称,上映年份,导演,主演,豆瓣评分,短评等信息,部分提取代码如下:
r1 = (url)#构建BeautifulSoup 库对象
再现辉煌
soup = , "html.parser")#通过soup 操作方法提取电影名称,上映年份,导演,演员
m o v i e _n a m e = s o u p .find(property="v:itemreviewed")
movie_year = soup.find(class_="year")
movie_actor = soup.find(rel="v:directedBy")
#演员有多个,使用find_all()方法m o v i e _p l a y e r =s o u p .f i n d _all(rel="v:starring")
str = ""
for i in movie_player: str+=i.string+","
#将提取到的信息组合在movie 变量中movie = movie_name.string + ","+movie_year.string +","+ movie_actor.string +","+str+ '\n'
print(movie)2.5 保存到本地
如图5,从网页中爬取到数据后,需要保存到本地,既可以保存在文件中,也可以保存在数据库中,本文将结果保存为csv 文件。部分代码如下:
with open("E:\\a.csv", "a")as f:
#中间代码为2.4中解析出的电影信息
f.write(movie)f.close()
3 结语
防灾技术高等专科学校本文基于Python 提供丰富的库,实现了豆瓣电影种热门类型电影的爬取,可以根据提
出的爬虫方法对豆瓣的图书和音乐等其他模块进行爬取,以此来研究用户的喜好。当今处于大数据时代,用户对各类数据的需求越来越大,爬虫作为数据收集的一种手段,具有广阔的应用前景。
参考文献
[1]中国互联网络信息中心.第43次《中国
互联网络发展状况统计报告》.
wwwnic/hlwfzyj/hlwxzbg/hlwtjbg/201902/t20190228_70645.html.[2]黑马程序员.解析Python 网络爬虫:核
心技术、Scrapy 框架、分布式爬虫(第一版)[M].北京:中国铁道出版社,2018.[3]周立柱,林玲.聚焦爬虫技术研究综述
[J].计算机应用,2005(09):1965-1969.[4]郭丽蓉.基于Python 的网络爬虫程序设
计[J].电子技术与软件工程,2017.[5]谢克武.大数据环境下基于Python 的网
络爬虫技术[J].软件开发,2017,5(44).[6]崔庆才.Python3网络爬虫开发实战[M].
北京:人民邮电出版社,2018.
作者简介
裴丽丽,硕士研究生。助教。研究方向为数据挖掘、推荐系统。
作者单位
山西机电职业技术学院 山西省长治市
046011
图2:获取url 链接图3:部分网页源码图4:提取电影信息
图5:存储的csv 文件