excel抓取多页网页数据(本节讲解如何使用爬虫抓取多级页面的数据(图))

优采云 发布时间: 2021-09-25 13:10

  excel抓取多页网页数据(本节讲解如何使用爬虫抓取多级页面的数据(图))

  上面介绍的爬虫案例都是单级页面数据爬取,但有时只爬单级页面是无法完成数据提取的。本节介绍如何使用爬虫爬取多级页面上的数据。

  在爬取的过程中,经常会遇到多级页面爬取。下面以爬取二级页面为例,说明各个级别页面的作用:

  一级页面以标签的形式链接到二级页面,只有二级页面才能提取需要的数据。多层次页面分析 下面以电影天堂(点击访问)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>&#39;

# film_list: [(&#39;name&#39;,&#39;downloadlink&#39;),(),(),()]

film_list = self.re_func(re_bds,two_html)

print(film_list)

# 插入数据库

sql = &#39;insert into movieinfo values(%s,%s)&#39;

#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__ == &#39;__main__&#39;:

spider = MovieSkySpider()

spider.run()

  要查询数据库中存储的数据,请执行以下命令:

  

mysql> select * from movieinfo\G

  输出如下,如下图所示:

  

  图 3:MySQL 数据库存储数据

  在二级页面上提取数据时要注意页面的类型。网站 在二级页面上使用了两种类型的网页结构。其他页面结构的正则表达式如下:

<p>

(.*?).*?

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线