上面两个网站就是我们本次教学的数据来源啦!不过这两个网站还有一点点的不一样,腾讯新闻的爬取难度是入门级,网易新闻的爬取是进阶版。

我们这次先从入门级的来,毕竟要学会走才能跑嘛。

流程实现

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

一般的爬虫教程都是在静态网页上做的,而我们这次要面对的就是动态网页。动态网页的爬取方式和静态网页的爬取方式有着蛮大的不同,废话不多说,动手吧!

1.网页F12大法

对一个网页进行分析,对于静态网页来说是看源代码,如下图所示:

红框标出的可是神器,你只要能在前端网页看到的元素,你都可以用这个神器找到某元素在源代码中的位置,不用让你像剥洋葱一样,一层一层地拨开它的心,估计你真的会流泪!

java中编写HTML 获取动态数据 java获取动态网页数据_java中编写HTML 获取动态数据


但是当我们看到页面下面的图表的时候,这个神器就不管用了,因为前端的图表已经踏入另外一个领域了,就是动态网页。比如下面这一张图

java中编写HTML 获取动态数据 java获取动态网页数据_数据_02


你去刚刚的神器去找,你会得到下面的这串代码,图表中的信息这么多,咋代码就这么一行?

java中编写HTML 获取动态数据 java获取动态网页数据_python_03


因为有些东西被图表给藏起来了,是啥呢?没错,就是数据!我们要用爬虫挖掘的宝藏就是这个!但是知道有宝藏了,它藏在哪里呢?那么就教你动态网页的“寻龙诀”!在F12页面找到Network的界面,如下图所示:

java中编写HTML 获取动态数据 java获取动态网页数据_java中编写HTML 获取动态数据_04


为啥一篇空白呢?因为这个时候网页页面已经渲染完了,我们需要的就是轻轻敲一下F5,让页面重新刷新,将页面渲染的过程捕获。

java中编写HTML 获取动态数据 java获取动态网页数据_大数据_05


好的,这样我们就找到了藏宝之地,接下来就是掘地三尺,把数据挖出来!

java中编写HTML 获取动态数据 java获取动态网页数据_爬虫_06


经过一番苦苦搜寻,每个文件一个个点开查看,我们挖到最终的宝藏!

java中编写HTML 获取动态数据 java获取动态网页数据_python_07


点开第一个文件,发现网页的URL是这样的,这个URL带有JQuery的参数,不能被我们所用,需要把后面的参数删掉

java中编写HTML 获取动态数据 java获取动态网页数据_数据_08


java中编写HTML 获取动态数据 java获取动态网页数据_python_09


看下数据的格式,是json的数据格式,这是十分常见的动态网页数据格式,对读取操作十分友好。可能有些小伙伴第一次看到这种格式的数据,所以我们用点工具让数据变得好看些!

工具网址
在线JSON解析

把网页中的JSON数据全选,然后复制到工具网站就发现格式变得清晰了。
有些小伙伴对数据处理可能有一定的了解,会发现其实这就是一个复合字典。

2.编码实现
前面铺垫了这么多网页解析的内容,如果大家耐着性子看完了,那么希望你能从中有所收获。

当个CV战士是没有什么意思的,毕竟每次你遇到的东西是不一样的,要知道怎样去解决问题,然后用代码实现才是核心。

下面就实现一个爬取各项数据,并且本地保存csv文件

import requests
import json
import csv

def china_total_data():
    chinatotal_url = 'https://view.inews.qq.com/g2/getOnsInfo?name=disease_other'
    response = requests.get(chinatotal_url).json()  # 发出请求并json化处理
    # 将获取到的json格式的字符串类型数据转换为python支持的字典类型数据
    data = json.loads(response['data'])
    chinaDayList = data["chinaDayList"]
    with open("病例.csv", "w+", newline="") as csv_file:
        writer = csv.writer(csv_file)
        header = ["date", "confirm", "suspect", "dead", "heal"]  # 定义表头
        writer.writerow(header)
        for i in range(len(chinaDayList)):
            data_row1 = [chinaDayList[i]["date"], chinaDayList[i]["confirm"], chinaDayList[i]["suspect"],
                         chinaDayList[i]["dead"], chinaDayList[i]["heal"]]
            writer.writerow(data_row1)

if __name__ == '__main__':
    china_total_data()

这样就把数据爬下来啦,并且保存在本地,保存成csv文件方便后续的读取与处理

总结

本次就简简单单地实现了一个数据的爬取工作,我不给太多代码是希望小伙伴们能够看着这一个例子能够举一反三。

对了,上面不是还提供了一个网页新闻的网页嘛,就供大家练习使用啦!说它是进阶版肯定是有道理的,就等着你们自己去探索啦!

如果之后有机会的话,对这篇爬取的数据进行处理可视化的教程也会出一篇博客,敬请期待!