div区域内容抓取_企业微信群机器人应用:使用python从网站抓取行业资讯并定时推送...

19bf0b2ae11027782e5052e4b5765994.png

在企业经营过程中,及时了解行业相关信息(市场动态、竞品策略、行业数据等等)是非常必要的。通常情况下,商品部门、营销部门、市场部门可能都会安排专门的人员定期进行这些信息的搜集、整理,再进行内部的分享。
不过在大数据时代,利用技术手段爬取互联网中的海量数据,再进行筛选分析,提取有用的信息已经是非常常用的手段,但是爬虫技术毕竟还是有点门槛的,好在现在有python这样的胶水语言。利用python+企业微信机器人就可以很简单地实现从目标网站抓取行业资讯,并定时自动推送到内部企业微信群内进行共享,起到相关人员都能够及时了解相同的行业资讯的作用,一定程度上也有利于消除企业内部的信息孤岛。
具体的实现的流程如下:

00365b37e4c0f53f88a8d0658a4573d7.png

下面是我从化妆品资讯网站抓取资讯,并通过企业微信群机器人进行群推送的例子,仅供参考(案例虽然简单,但是也涉及到了http请求、html处理、webhook接口调用等相关知识,其实也算是个小小的爬虫了吧,哈哈)。
首先我们打开要抓取信息的页面,对于页面结构进行一个简单的分析,主要是为了后面对请求回来的信息好进行提取。

340685066e4c4962dddba160245fcbf1.png

如图所示,我要抓取的是资讯列表和链接地址,这个部分是包含在一个<div id="content">...</div>标签当中的,其中每一个列表项定都有class = "left_news"这个属性:<div class="left_news">...</div>,再下一层标签中,我们看到在每一个div中都有一个<h1>疫情下的韩国经济喜忧参半,免税业务大受打击,奢侈品销售出现反弹</h1>标签。
我要抓取的信息其实在这相标签中就已经全部都有了,那么这个就是我要抓取的页面内容的目标了。

376f744e334e5b27640b7f0fac683755.png

抓取信息的代码实现就用现在超流行的python(各种实用函数库都有,直接拿来用),由于是从网页抓取信息,并进行提取,这里用到requests,bs4(BeautifulSoup)两个库,最终代码如下:

# 从化妆品资讯网查询新闻列表
# 通过调用企业微信机器接口推送到群里
# 先引入功能库
import requests
import bs4


# 自定义一个请求函数,参数是网址请求头请求参数,没有参数就空着,请求成功后返回页面的新闻列表
def catchnewslist(newsurl, headers, params):
    urllist = []
    titlelist = []
    resultlist = []
    response = requests.get(newsurl, headers=headers)
    if response.status_code == 200:
        print("请求成功!")
        response.encoding = 'utf-8'
        content = bs4.BeautifulSoup(response.text, 'html.parser')
        elements = content.select("#content h1 a")               # 这一句就是提取请求到的页面内容中要提取的新闻,根据不同的页面结构进行修改
        for element in elements:                                 # 把取到的新闻列表数据存到一个python列表中,方便后面使用
            urllist.append("http://www.cosmetic-news.net/" + element.get('href'))
            titlelist.append(element.string)
        resultlist = [[a, b] for a, b in zip(urllist, titlelist)]   # 把标题和地址组合成一个嵌套列表,并返回
    else:
        print(response.status_code)
        print("请求失败!")
    return resultlist

# 定义一个向企业微个webhook地址post数据的函数,参数为地址和数据,这里post的是md5格式的字符串
def postmsg(url, post_data):
    post_data = '{"msgtype":"markdown","markdown":{"content":"%s"}}' % post_data
    # print(post_data)

    if url == '':
        print('url is blank')
    else:
        r = requests.post(url, data=post_data.encode())
        rstr = r.json()
        if r.status_code == 200 and 'error' not in rstr:
            result = 'success!'
            return result
        else:
            return 'Error'

# 主函数
if __name__ == '__main__':
    newsurl = "http://www.cosmetic-news.net/newx-4.html"
    headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.92 Safari/537.36"}
    # params = {"datatype":"jsonp", "page":"1", "callback":"flightHandler"}  参数视需求添加
    newslist = catchnewslist(newsurl, headers, '')
    # print(newslist)
    # 把请求回来的数据,按照要post到接口的md的格式再处理一下
    newslistdata = u"### 近期行业资讯: n"
    for i in newslist:
        # print("[%s](%s)" % (i[1], i[0]))
        newslistdata = newslistdata + "%s [%s](%s)" % (newslist.index(i) + 1, i[1], i[0]) + "n"
    print(newslistdata)
    url = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=********-****-****-****-**********"   # 要post的群机器人的webhook地址
    # post_data = '[这是一个链接](http://work.weixin.qq.com/api/doc)' # 带链接的md字符串格式
    result = postmsg(url, newslistdata)  # 调用post,向webhook发送数据
    print(result)

补充说明一下,request请求头的写法,就是代码中:

headers={“******”}

这一句,大括号中的内容可以从浏览器=》开发者工具=》Network=》Headers=》Request Headers 中直接复制过来,如下图所示:

85fd42b1777de331dd596c52f4ba141b.png

以上代码运行环境为python3.8,运行结果如下:

5bf0059ef4287f226b588043a57393e1.png

最后,我们只需要把这段代码部署为任务计划,就可以定时抓取网页信息,并自动推送到群了,掌握了这个方法,还可以进行很多的扩展。
对于计划任务的设置,之前的文章中已经写过,可以参考下面这一篇:

赵旭臻:python提取数据库数据并实现企业微信机器人定时消息推送​zhuanlan.zhihu.com
c52ba6aba3a38d732d7c87e64a997dc4.png
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值