简单的python爬虫 (二)

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

Python span什么类型 python .span_Python span什么类型

网页分析

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

Python span什么类型 python .span_html_02

可以看到这里有3个 p标签,分别对应了三个段落

Python span什么类型 python .span_Python span什么类型_03


这里以一个p为例,

Python span什么类型 python .span_html_04

打开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]

然后是最关键的一句话

正则表达式 进行内容提取

Python span什么类型 python .span_python_05


findall函数是找到全部的符合“模式”的字串,返回结果是一个list。

这里的第一个参数是所谓的“模式”,也就是上文所说的 >???<

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

模式串就写完了

最后可以看一下结果:

print(t)

Python span什么类型 python .span_爬虫_06


然后就很简单的把前面多余的“>”和后面多余的“<”去掉就行了

全部代码

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 ,比如上面的文本,只要几行就可以搞定,不用正则表达式,就可以找到。

最后处理的结果

Python span什么类型 python .span_python_07