动态网页数据获取实战

写在开始

做了好久的鸽子了,主要是上几篇的博客的阅读量实在是惨淡。上几篇博客多事笔记内容为主,面向没有接触过该领域的小白,看来不太受欢迎,也可能是写得不咋地(小声逼逼)。经过几个月的积累,又做了不少的项目,是时候再写点东西啦!

动态网页的数据怎么获取呢?这篇博客手把手教你get数据。

数据来源

https://news.qq.com/zt2020/page/feiyan.htm#/global

https://wp.m.163.com/163/page/news/virus_report/index.html?nw=1&anw=1

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

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

流程实现

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

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

1.网页F12大法
对一个网页进行分析,对于静态网页来说是看源代码,如下图所示:
红框标出的可是神器,你只要能在前端网页看到的元素,你都可以用这个神器找到某元素在源代码中的位置,不用让你像剥洋葱一样,一层一层地拨开它的心,估计你真的会流泪!
在这里插入图片描述
但是当我们看到页面下面的图表的时候,这个神器就不管用了,因为前端的图表已经踏入另外一个领域了,就是动态网页。比如下面这一张图
在这里插入图片描述
你去刚刚的神器去找,你会得到下面的这串代码,图表中的信息这么多,咋代码就这么一行?
在这里插入图片描述
因为有些东西被图表给藏起来了,是啥呢?没错,就是数据!我们要用爬虫挖掘的宝藏就是这个!但是知道有宝藏了,它藏在哪里呢?那么就教你动态网页的“寻龙诀”!

在F12页面找到Network的界面,如下图所示:
在这里插入图片描述
为啥一篇空白呢?因为这个时候网页页面已经渲染完了,我们需要的就是轻轻敲一下F5,让页面重新刷新,将页面渲染的过程捕获。
在这里插入图片描述
好的,这样我们就找到了藏宝之地,接下来就是掘地三尺,把数据挖出来!
在这里插入图片描述
经过一番苦苦搜寻,每个文件一个个点开查看,我们挖到最终的宝藏!
在这里插入图片描述
点开第一个文件,发现网页的URL是这样的,这个URL带有JQuery的参数,不能被我们所用,需要把后面的参数删掉
在这里插入图片描述
在这里插入图片描述
看下数据的格式,是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文件方便后续的读取与处理

总结

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

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

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

结语

如果说这篇文章有让你学到一定的知识的话,不妨点个赞和关注,让博主能够看到,如果讲解中有什么错误和疏忽,也劳烦在评论中指出或提问,博主会第一时间进行更新和答复,谢谢!

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现网页数据更新后发送邮件的功能,可以使用Python的smtplib和email库。下面是一个示例代码: ```python import requests import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart # 获取网页数据 def get_web_data(url): response = requests.get(url) data = response.text return data # 发送邮件 def send_email(sender_email, sender_password, receiver_email, subject, content): # 设置邮件内容 message = MIMEMultipart() message['From'] = sender_email message['To'] = receiver_email message['Subject'] = subject message.attach(MIMEText(content, 'plain')) # 连接SMTP服务器并发送邮件 with smtplib.SMTP_SSL('smtp.gmail.com', 465) as server: server.login(sender_email, sender_password) server.sendmail(sender_email, receiver_email, message.as_string()) # 主函数 def main(): # 网页URL url = 'http://example.com/data' # 替换为你要获取数据网页URL # 获取网页数据 data = get_web_data(url) # 判断数据是否有更新 # 这里只是一个示例,你需要根据具体情况编写判断逻辑 if data != '上次保存的数据': # 发送邮件通知数据更新 sender_email = '[email protected]' # 发件人邮箱 sender_password = 'your_password' # 发件人邮箱密码(授权码) receiver_email = '[email protected]' # 收件人邮箱 subject = '网页数据更新通知' # 邮件主题 content = '网页数据已更新,请查看最新数据。' # 邮件内容 send_email(sender_email, sender_password, receiver_email, subject, content) # 执行主函数 if __name__ == '__main__': main() ``` 在代码中,你需要替换以下内容: - `url`:替换为你要获取数据网页URL。 - `sender_email`:替换为发件人的邮箱地址。 - `sender_password`:替换为发件人邮箱的密码或授权码。 - `receiver_email`:替换为收件人的邮箱地址。 这个示例代码中使用了Gmail作为发件人的邮箱,如果你使用其他邮箱,请参考相应的SMTP服务器地址和端口号进行修改。另外,代码中的判断数据是否有更新的逻辑只是一个示例,你需要根据具体情况编写适合你的判断逻辑。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值