excel抓取多页网页数据(本节讲解如何使用爬虫抓取多级页面的数据(图))
优采云 发布时间: 2021-09-25 13:10excel抓取多页网页数据(本节讲解如何使用爬虫抓取多级页面的数据(图))
上面介绍的爬虫案例都是单级页面数据爬取,但有时只爬单级页面是无法完成数据提取的。本节介绍如何使用爬虫爬取多级页面上的数据。
在爬取的过程中,经常会遇到多级页面爬取。下面以爬取二级页面为例,说明各个级别页面的作用:
一级页面以标签的形式链接到二级页面,只有二级页面才能提取需要的数据。多层次页面分析 下面以电影天堂(点击访问)2020新电影精品作为案例讲解,抢到每部电影的名字,以及下载链接。首先点击“更多”进入一级页面,如下图:
图1:Python爬虫多级页面爬取
1) 查找 url 规则。通过简单的分析,我们可以知道主页面和副页面都是静态页面。接下来分析url规则,通过点击page 1, page 2...,规则如下:
第1页 :https://www.dytt8.net/html/gndy/dyzz/list_23_1.html
第2页 :https://www.dytt8.net/html/gndy/dyzz/list_23_2.html
第n页 :https://www.dytt8.net/html/gndy/dyzz/list_23_n.html
2) 确定正则表达式并通过元素检查,可以看到一级页面的元素结构如下:
图2:页面元素分析
正则表达式如下:
.*?'
# 获取二级页面链接
# link_list: ['/html//html/gndy/dyzz/20210226/61131.html','/html/xxx','','']
link_list = self.re_func(re_bds,one_html)
for link in link_list:
# 判断是否需要爬取此链接
# 1.获取指纹
# 拼接二级页面url
two_url = 'https://www.dytt8.net' + link
s = md5()
#加密url,需要是字节串
s.update(two_url.encode())
# 生成指纹,获取十六进制加密字符串,
finger = s.hexdigest()
# 2.通过函数判断指纹在数据库中是否存在
if self.is_hold_on(finger):
# 抓取二级页面数据
self.save_html(two_url)
time.sleep(random.randint(1,2))
# 抓取后,把想用的url专属指纹存入数据库
ins = 'insert into request_finger values (%s)'
self.cursor.execute(ins,[finger])
self.db.commit()
else:
sys.exit('更新完成')
# 4.判断链接是否已经抓取过
def is_hold_on(self,finger):
# 查询数据库
sql='select finger from request_finger where finger=%s'
# execute()函数返回值为受影响的行数(即0或者非0)
r = self.cursor.execute(sql,[finger])
# 如果为0表示没有抓取过
if not r:
return True
# 5.解析二级页面,获取数据(名称与下载链接)
def save_html(self,two_url):
two_html = self.get_html(two_url)
re_bds = '(.*?) \
.*?.*?style="BACKGROUND-COLOR:.*?</a>'
# film_list: [('name','downloadlink'),(),(),()]
film_list = self.re_func(re_bds,two_html)
print(film_list)
# 插入数据库
sql = 'insert into movieinfo values(%s,%s)'
#L = list(film_list[0])
self.cursor.executemany(sql,film_list)
self.db.commit()
#主函数
def run(self):
# 二级页面后四页的正则表达式略有不同,需要重新分析
for i in range(1,4):
url = self.url.format(i)
self.parse_html(url)
if __name__ == '__main__':
spider = MovieSkySpider()
spider.run()
要查询数据库中存储的数据,请执行以下命令:
mysql> select * from movieinfo\G
输出如下,如下图所示:
图 3:MySQL 数据库存储数据
在二级页面上提取数据时要注意页面的类型。网站 在二级页面上使用了两种类型的网页结构。其他页面结构的正则表达式如下:
<p>
(.*?).*?