简单的python爬虫 (二)

简单的python爬虫 (二)

上文我们说到了怎么爬到网页,但是其实我们最关心的还是怎得到我们需要的数据?上文链接
比如我们需要提取 相关文本 来确定安徽的疫情情况,也就是下图的正文部分

在这里插入图片描述

网页分析

我们首先需要知道这段文字在哪里
f12

在这里插入图片描述

可以看到这里有3个 p标签,分别对应了三个段落
在这里插入图片描述
这里以一个p为例,
在这里插入图片描述

打开p标签,刚好发现这里有很多span的标签,而每个span里面就是我们需要的文本
2020年 5 月 31 ……

后来实际操作的时候发现,他不是所有的都是用的span标签,有些是<font>啊什么的,索性我就用其他特征比如
>???< ,头和尾一定是 ‘>’ 和 ‘<’ ,问号是某种特征比如汉字,数字

那么分析就已经可以结束了,开始上代码
这里提取出 中间正文 的部分,也就是上面红色框框的内容 不是橙色嗷 ,防止后面操作的时候出现多余的内容

start_str = '<div class="wzcon j-fontContent clearfix">'
s = content.find(start_str) # find函数会返回一个下标,是这段字符串在content里的位置
end_str = '</div>'
e = content.find(end_str, s) # 第二个参数是从s的位置开始找,返回找到的第一个字串的位置
# 找到开始的位置和结束的位置
# 把这段提取出来,从s到e
key = content[s:e]

然后是最关键的一句话
正则表达式 进行内容提取
在这里插入图片描述
findall函数是找到全部的符合“模式”的字串,返回结果是一个list。
这里的第一个参数是所谓的“模式”,也就是上文所说的 >???<

那么根据我们的需要来写模式串:
首先是中文,用unicode码表示,范围在 4e00 - 9fa5, 因为是unicode码,所以前面加上 \u 又因为中文至少匹配一次,所以用 +
还需要匹配数字,也就是0-9,当然有时候会表示时间那么中间会有 “0-24时”这样的文本,所以匹配数字或者匹配 “-” ,也是因为至少匹配一次,所以用 +
数字和汉字中间用|或连接起来

模式串就写完了

最后可以看一下结果:

print(t)

在这里插入图片描述
然后就很简单的把前面多余的“>”和后面多余的“<”去掉就行了

全部代码

import requests as rq
import re

# Part1
url = "http://wjw.ah.gov.cn/xwzx/gzdt/53195761.html"
html = rq.get(url)
html.encoding = 'utf-8'
status = html.status_code
content = html.text
print(status)

# Part2
start_str = '<div class="wzcon j-fontContent clearfix">'
s = content.find(start_str)
end_str = '</div>'
e = content.find(end_str, s)
key = content[s:e]

# Part3
t = re.findall('>[0-9,-]+|[\u4e00-\u9fa5]+<', key)
text = str().join(t).replace(">", "").replace("<", "")

'''
# old_version
text = ""
for i in t:
    if i[0] == '>':
        i = i[1:]
    if i[-1] == '<':
        i = i[0:-1]
    text += i
'''

print(text)

因为没有匹配标点,所以就看起来有点怪,但是不影响结果嘛。


2020年5月31日0-24安徽省报告无新增本地无新增本地疑似病例截至5月31日24安徽省累计报告本地确诊病例990治愈出院984例累计报告境外输入确诊病例1例治愈出院1例累计报告死亡病例6尚在医学观察39累计医学观察293242020年5月31日0-24安徽省报告无转为确诊0解除隔离0截至5月31日24全省无症状感染者均已解除医学观察

之后会继续更新爬取图片,可以继续关注一下

第三节更新了 链接在这里
除了保存图片,还稍微讲了一下 bs4 ,比如上面的文本,只要几行就可以搞定,不用正则表达式,就可以找到。

最后处理的结果
在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值