网页源代码抓取工具(动态网页的爬取方式和静态网页(组图))

优采云 发布时间: 2022-03-20 06:06

  网页源代码抓取工具(动态网页的爬取方式和静态网页(组图))

  写在开头

  鸽了很久,主要是最近几篇博客的阅读量实在是惨淡。最后几篇博客主要是关于笔记的内容。它们针对的是没有接触过这个领域的新手。它们似乎不是很受欢迎,或者它们可能写得不好(安静而有力)。经过几个月的积累和很多项目,是时候写点东西了!

  如何从动态网页中获取数据?本博客将教您如何获取数据。

  数据源

  *nw*=1&*anw*=1

  以上两个网站就是我们教学的数据源!但是,这两个 网站 有点不同。腾讯新闻的爬取难度为入门级,网易新闻的爬取难度为进阶版。

  这次让我们从入门级开始。毕竟,我们必须先学会走路才能跑。

  流程实现

  找到要爬取的源网站后,首先要做的永远是分析网页的结构,这也是最复杂的一步,需要不断尝试积累经验。

  一般爬虫教程都是在静态网页上做的,这次我们处理的是动态网页。动态网页的爬取方式与静态网页的爬取方式有很大不同。事不宜迟,让我们开始吧!

  1.网页F12大法

  分析一个网页,对于一个静态网页,看源码,如下图:

  红色框标记了工件。只要你能看到前端网页上的元素,就可以利用这个神器,在源码中找到一个元素的位置,而不用像剥洋葱一样让你一层一层剥。它的心,估计你真的要哭了!

  

  但是当我们看到页面底部的图表时,这个神器就不行了,因为前端图表已经跨入了另一个领域,那就是动态网页。例如下图

  

  你去刚才的神器里找,会得到如下代码。图表信息这么多,为什么只有一行代码?

  

  因为图表隐藏了一些东西,它是什么?没错,就是数据!这就是我们要和爬虫一起挖掘的宝藏!可明知有宝物,藏在何处?那我就教你动态网页的“寻龙”!

  在F12页面找到Network接口,如下图:

  

  为什么一个是空白的?因为此时网页已经渲染完毕,我们只需要点击F5刷新页面,捕捉页面渲染的过程即可。

  

  好了,至此我们找到了宝藏,接下来就是挖三尺,挖出数据!

  

  经过大量的搜索和逐个文件的点击,我们挖掘到了终极宝藏!

  

  点击第一个文件,发现网页的网址是这样的。这个 URL 有 JQuery 参数,我们不能使用。我们需要删除以下参数。

  

  

  让我们看一下数据格式。就是json数据格式,是一种很常见的动态网页数据格式,对阅读操作非常友好。有的朋友可能第一次看到这种格式的数据,那我们就用一些工具让数据看起来更好看吧!

  工具网址

  在线JSON解析

  选中网页中的所有JSON数据,然后复制到工具网站中,发现格式变清晰了。

  有的小伙伴可能对数据处理有一定的了解,会发现这其实是一个复合字典。

  2.编码实现

  前面解析了这么多网页。如果你耐心阅读,我希望你能从中有所收获。

  成为 CV 战士是没有意义的。毕竟每次遇到不一样的事情,知道怎么解决问题然后用代码实现才是核心。

  我们来实现一个爬取各种数据,并将csv文件保存到本地

  1import requests

2import json

3import csv

4

5def china_total_data():

6 chinatotal_url = 'https://view.inews.qq.com/g2/getOnsInfo?name=disease_other'

7 response = requests.get(chinatotal_url).json() # 发出请求并json化处理

8 # 将获取到的json格式的字符串类型数据转换为python支持的字典类型数据

9 data = json.loads(response['data'])

10 chinaDayList = data["chinaDayList"]

11 with open("病例.csv", "w+", newline="") as csv_file:

12 writer = csv.writer(csv_file)

13 header = ["date", "confirm", "suspect", "dead", "heal"] # 定义表头

14 writer.writerow(header)

15 for i in range(len(chinaDayList)):

16 data_row1 = [chinaDayList[i]["date"], chinaDayList[i]["confirm"], chinaDayList[i]["suspect"],

17 chinaDayList[i]["dead"], chinaDayList[i]["heal"]]

18 writer.writerow(data_row1)

19

20if __name__ == '__main__':

21 china_total_data()

22

23

  这样数据就爬下来保存在本地,保存为csv文件,供后续读取处理。

  总结

  这一次,我简单地实现了一个数据爬取工作。代码就不给太多了,希望小伙伴们可以看看这个例子,做个推论。

  对了,上面不是有网页新闻页面吗,仅供大家练习使用!说是进阶版当然有道理,就等你自己去探索!

  以后有机会的话,关于爬取数据的处理和可视化的教程也会发表博客,敬请期待!

  结语

  如果这个文章教会了你一些知识,请点赞关注,让博主看到。说明中如有错误或遗漏,请在评论中指出或提问。,博主会第一时间更新和回复,谢谢!

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线