『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 6114|回复: 5

[技术探讨] 肺炎疫情状态python爬虫

[复制链接]

8

主题

113

帖子

999

积分

高级会员

Rank: 4

积分
999
金钱
886
HASS币
10
发表于 2020-1-28 02:27:47 | 显示全部楼层 |阅读模式
本帖最后由 三金 于 2020-1-28 02:59 编辑

先诉诉苦:
之前看各位大佬写插件,就很羡慕能自给自足,想干什么干什么
这两天刚好在玩node-red,发现写流程好像也能达到差不多的效果
但是搞了两天之后终于相信一个事实,我这样的不太可能在node-red的function里写出东西,还能达到我的目的!

然后昨天下午开始接触python和html,从安装环境开始到半夜十二点才写出来一个简单的丁香园爬虫不过还是有种成就感的,不发出来,全世界的人怎么知道我会写Python了呢?
本来想看看能不能做插件的,看了看各位大佬写的插件

嗯~~~
看不懂!!什么鬼东西绕七绕八的,走迷宫一样的!!
困得受不了,果断放弃,发完帖子去睡觉!!
打印如下:
over.png
丁香园连接:http://3g.dxy.cn/newh5/view/pneumonia
(ps:方糖公众号里知道的)
QQ浏览器截图20200128013950.png
同理加上新闻标签就能打印新闻内容
(懒得加了)
QQ浏览器截图20200128013742.png 还有辟谣内容
QQ浏览器截图20200128013813.png

再诉诉苦:
太难了,搞个什劳子的编码格式就搞了半天,什么鬼玩意儿,能有那么多的类型?!!

然后有个问题:
正则表达式里怎么添加变量啊?
谷歌好些方法我都试过了,没一个能行的,头疼
以下是代码:我的环境好像有问题,格式要转来转去才行,不然一直报错,我也不知道为什么,然后我就在网上各种搜,算是拼出来的代码
import re
import requests
from bs4 import BeautifulSoup

cityname='杭州'
req = requests.get('http://3g.dxy.cn/newh5/view/pneumonia')

html=req.content
html_doc=str(html,'utf-8')
div_bf = BeautifulSoup(html_doc,'lxml')

div1 = div_bf.find_all('p',class_="confirmedNumber___3WrF5")
div2 = div_bf.find_all('script',id="getAreaStat")

div2=str(div2)
div2=div2.replace("cityName","城市名")
div2=div2.replace("confirmedCount","确诊人数")
div2=div2.replace("suspectedCount","疑似人数")
div2=div2.replace("curedCount","治愈人数")
div2=div2.replace("deadCount","死亡人数")
div3=div2.replace('"'," ")
div3=div3.replace(':',": ")
div3=re.findall(r' 杭州 (.+?)}',div3)

print('全国情况:'+div1[0].text.replace('\n\n<span style="color: #4169e2">56</span>\n\n',''))
print("城市名:"+cityname+''+div3[0])


不知哪位大佬能搞个通俗易懂的插件让小白我学习一下







回复

使用道具 举报

9

主题

251

帖子

4380

积分

元老级技术达人

积分
4380
金钱
4114
HASS币
100
发表于 2020-1-28 09:10:46 | 显示全部楼层
re正则,给你参考一下吧
import re
import json
import requests

import time


def test():
    url = 'http://3g.dxy.cn/newh5/view/pneumonia'
    headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
    try:
        response = requests.get(url,headers=headers)
        response.encoding = "utf-8"
        resp = response.text
        patt = re.compile(r'getAreaStat = (.*?)\}catch')
        getAreaStat = patt.findall(resp)
        getAreaStat = getAreaStat[0]
        getAreaStat_json = json.loads(getAreaStat)
        return getAreaStat_json

    except Exception as e:
        print("获取出错!!!", e)

if __name__ == '__main__':
    time_start = time.time()
    test_json = test()
    print(test_json[0])
    time_end = time.time()
    timecost = time_end-time_start
    print("耗时:", "%.2f" % timecost, "秒")
E5-2650L-V2+华南X79+16GB*2
回复

使用道具 举报

8

主题

113

帖子

999

积分

高级会员

Rank: 4

积分
999
金钱
886
HASS币
10
 楼主| 发表于 2020-1-28 14:32:07 | 显示全部楼层
xz0609 发表于 2020-1-28 09:10
re正则,给你参考一下吧

感谢大佬分享!!!!!
回复

使用道具 举报

0

主题

106

帖子

603

积分

高级会员

Rank: 4

积分
603
金钱
497
HASS币
0
QQ
发表于 2020-1-28 20:44:40 | 显示全部楼层
大佬 python是刚学的吗,我是小白也想学python,请问你是在哪学的
回复

使用道具 举报

3

主题

321

帖子

2893

积分

论坛积极会员

积分
2893
金钱
2572
HASS币
10
发表于 2020-1-28 22:53:27 | 显示全部楼层
本帖最后由 tcwj2008 于 2020-1-28 22:55 编辑

去获取前面的json数据呀,别使用div后面的数据。我就是从noed-red里面抓的,其实并不复杂,丁香园还算是比较良心的,json直接源码上就能抓
回复

使用道具 举报

40

主题

3056

帖子

1万

积分

超级版主

Nero

Rank: 8Rank: 8

积分
11149
金钱
8042
HASS币
182
发表于 2020-1-29 11:08:22 | 显示全部楼层
丁香园爬虫GitHub已经有人放出API,为了让更多人看到数据,还是别爬丁香园了,减少压力。
Nero
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-25 19:33 , Processed in 0.105183 second(s), 31 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表