python抓取数据推送到微信(python抓取网络数据)
python怎么编程获取网页的信息发到手机上
要看你是专业程序员还是编程爱好者。如果是前者。通常这样问有些大,就是其实它挺复杂一个平台。包括采集,过滤,批量下发等。可能还需要手机客户端。
如果你只是个人使用的编程爱好者。两上途径:
1.python获取信息后,放在网站上,手机去拿
2.python获取信息后,以短消息方式发到手机。
当然也可以混合方式。就是python获取信息放在一个位置上,再通过手机软件或者是短消息通知手机去拿来。
至于python如何获取信息。这个回答挺多的。你搜索一下。作为练习python的作业是可以的。
如何用python实现从传感器发送数据和消息到短信和微信等
该回答不涉及传感器选购以及如何使用Python调用,建议根据自己的机子自行淘宝或者参考别的问题(虽然现在没有)
简述:
* 语言:python 2.7.11
* 第三方库:itchat
* 需要设备:采集湿度的设备(机房的电脑?),传感器,一个139邮箱(如果需要短信提示的话)
流程:
* 确定机子以及传感器
* 通过说明书(或者店主...)学会了通过Python获取传感器数据
* 编写判断语句,在命令行输出警告
* 将微信提示或邮箱提示替换警告的方式
微信个人号通知:
import itchat
itchat.auto_login()
itchat.send('Temperature warning')
这个插件的文档在这里:itchat
邮箱通知:
我写了一个简单的Demo: EasierLife/Plugins/MailNotification at master · littlecodersh/EasierLife · GitHub
from MailNotification import MailNotification
with MailNotification() as mail:
mail.send_notification('Temperature warning')
短信通知:
你可以选择使用各种短信平台,但最简单的方式是注册一个139邮箱,然后通过上面邮箱通知的方法发送邮件,你会收到相应的短信提示。
python怎么抓取微信阅
抓取微信公众号的文章
一.思路分析
目前所知晓的能够抓取的方法有:
1、微信APP中微信公众号文章链接的直接抓取(;mid=2735446906idx=1sn=ece37deaba0c8ebb9badf07e5a5a3bd3scene=0#rd)
2、通过微信合作方搜狗搜索引擎(),发送相应请求来间接抓取
第1种方法中,这种链接不太好获取,而且他的规律不是特别清晰。
因此本文采用的是方法2----通过给 weixin.sogou.com 发送即时请求来实时解析抓取数据并保存到本地。
二.爬取过程
1、首先在搜狗的微信搜索页面测试一下,这样能够让我们的思路更加清晰
在搜索引擎上使用微信公众号英文名进行“搜公众号”操作(因为公众号英文名是公众号唯一的,而中文名可能会有重复,同时公众号名字一定要完全正确,不然可能搜到很多东西,这样我们可以减少数据的筛选工作,只要找到这个唯一英文名对应的那条数据即可),即发送请求到';query=%sie=utf8_sug_=n_sug_type_= ' % ?'python',并从页面中解析出搜索结果公众号对应的主页跳转链接。
2.获取主页入口内容
使用request , urllib,urllib2,或者直接使用webdriver+phantomjs等都可以
这里使用的是request.get()的方法获取入口网页内容
[python]?view plain?copy
#?爬虫伪装头部设置
self.headers?=?{'User-Agent':?'Mozilla/5.0?(Windows?NT?6.3;?WOW64;?rv:51.0)?Gecko/20100101?Firefox/51.0'}
#?设置操作超时时长
self.timeout?=?5
#?爬虫模拟在一个request.session中完成
self.s?=?requests.Session()
[python]?view plain?copy
#搜索入口地址,以公众为关键字搜索该公众号
def?get_search_result_by_keywords(self):
self.log('搜索地址为:%s'?%?self.sogou_search_url)
return?self.s.get(self.sogou_search_url,?headers=self.headers,?timeout=self.timeout).content
3.获取公众号地址
从获取到的网页内容中,得到公众号主页地址, 这一步骤有很多方法, beautifulsoup、webdriver,直接使用正则,pyquery等都可以
这里使用的是pyquery的方法来查找公众号主页入口地址
[python]?view plain?copy
#获得公众号主页地址
def?get_wx_url_by_sougou_search_html(self,?sougou_search_html):
doc?=?pq(sougou_search_html)
#print?doc('p[class="tit"]')('a').attr('href')
#print?doc('div[class=img-box]')('a').attr('href')
#通过pyquery的方式处理网页内容,类似用beautifulsoup,但是pyquery和jQuery的方法类似,找到公众号主页地址
return?doc('div[class=txt-box]')('p[class=tit]')('a').attr('href')
4.获取公众号主页的文章列表
首先需要加载公众号主页,这里用的是phantomjs+webdriver, 因为这个主页的内容需要JS 渲染加载,采用之前的方法只能获得静态的网页内容
[python]?view plain?copy
#使用webdriver?加载公众号主页内容,主要是js渲染的部分
def?get_selenium_js_html(self,?url):
browser?=?webdriver.PhantomJS()
browser.get(url)
time.sleep(3)
#?执行js得到整个页面内容
html?=?browser.execute_script("return?document.documentElement.outerHTML")
return?html
得到主页内容之后,获取文章列表,这个文章列表中有我们需要的内容
[python]?view plain?copy
#获取公众号文章内容
def?parse_wx_articles_by_html(self,?selenium_html):
doc?=?pq(selenium_html)
print?'开始查找内容msg'
return?doc('div[class="weui_media_box?appmsg"]')
#有的公众号仅仅有10篇文章,有的可能多一点
#return?doc('div[class="weui_msg_card"]')#公众号只有10篇文章文章的
5.解析每一个文章列表,获取我们需要的信息
6.处理对应的内容
包括文章名字,地址,简介,发表时间等
7.保存文章内容
以html的格式保存到本地
同时将上一步骤的内容保存成excel 的格式
8.保存json数据
这样,每一步拆分完,爬取公众号的文章就不是特别难了。
三、源码
第一版源码如下:
[python]?view plain?copy
#!/usr/bin/python
#?coding:?utf-8
import?sys
reload(sys)
sys.setdefaultencoding('utf-8')
from?urllib?import?quote
from?pyquery?import?PyQuery?as?pq
from?selenium?import?webdriver
import?requests
import?time
import?re
import?json
import?os
class?weixin_spider:
def?__init__(self,?kw):
'?构造函数?'
self.kw?=?kw
#?搜狐微信搜索链接
#self.sogou_search_url?=?';query=%sie=utf8_sug_=n_sug_type_='?%?quote(self.kw)
self.sogou_search_url?=?';query=%sie=utf8s_from=input_sug_=n_sug_type_='?%?quote(self.kw)
#?爬虫伪装
self.headers?=?{'User-Agent':?'Mozilla/5.0?(Windows?NT?10.0;?WOW64;?rv:47.0)?Gecko/20100101?FirePHP/0refox/47.0?FirePHP/0.7.4.1'}
#?操作超时时长
self.timeout?=?5
self.s?=?requests.Session()
def?get_search_result_by_kw(self):
self.log('搜索地址为:%s'?%?self.sogou_search_url)
return?self.s.get(self.sogou_search_url,?headers=self.headers,?timeout=self.timeout).content
def?get_wx_url_by_sougou_search_html(self,?sougou_search_html):
'?根据返回sougou_search_html,从中获取公众号主页链接?'
doc?=?pq(sougou_search_html)
#print?doc('p[class="tit"]')('a').attr('href')
#print?doc('div[class=img-box]')('a').attr('href')
#通过pyquery的方式处理网页内容,类似用beautifulsoup,但是pyquery和jQuery的方法类似,找到公众号主页地址
return?doc('div[class=txt-box]')('p[class=tit]')('a').attr('href')
def?get_selenium_js_html(self,?wx_url):
'?执行js渲染内容,并返回渲染后的html内容?'
browser?=?webdriver.PhantomJS()
browser.get(wx_url)
time.sleep(3)
#?执行js得到整个dom
html?=?browser.execute_script("return?document.documentElement.outerHTML")
return?html
def?parse_wx_articles_by_html(self,?selenium_html):
'?从selenium_html中解析出微信公众号文章?'
doc?=?pq(selenium_html)
return?doc('div[class="weui_msg_card"]')
def?switch_arctiles_to_list(self,?articles):
'?把articles转换成数据字典?'
articles_list?=?[]
i?=?1
if?articles:
for?article?in?articles.items():
self.log(u'开始整合(%d/%d)'?%?(i,?len(articles)))
articles_list.append(self.parse_one_article(article))
i?+=?1
#?break
return?articles_list
def?parse_one_article(self,?article):
'?解析单篇文章?'
article_dict?=?{}
article?=?article('.weui_media_box[id]')
title?=?article('h4[class="weui_media_title"]').text()
self.log('标题是:?%s'?%?title)
url?=?''?+?article('h4[class="weui_media_title"]').attr('hrefs')
self.log('地址为:?%s'?%?url)
summary?=?article('.weui_media_desc').text()
self.log('文章简述:?%s'?%?summary)
date?=?article('.weui_media_extra_info').text()
self.log('发表时间为:?%s'?%?date)
pic?=?self.parse_cover_pic(article)
content?=?self.parse_content_by_url(url).html()
contentfiletitle=self.kw+'/'+title+'_'+date+'.html'
self.save_content_file(contentfiletitle,content)
return?{
'title':?title,
'url':?url,
'summary':?summary,
'date':?date,
'pic':?pic,
'content':?content
}
def?parse_cover_pic(self,?article):
'?解析文章封面图片?'
pic?=?article('.weui_media_hd').attr('style')
p?=?re.compile(r'background-image:url(.??)')
rs?=?p.findall(pic)
self.log(?'封面图片是:%s?'?%?rs[0]?if?len(rs)??0?else?'')
return?rs[0]?if?len(rs)??0?else?''
def?parse_content_by_url(self,?url):
'?获取文章详情内容?'
page_html?=?self.get_selenium_js_html(url)
return?pq(page_html)('#js_content')
def?save_content_file(self,title,content):
'?页面内容写入文件?'
with?open(title,?'w')?as?f:
f.write(content)
def?save_file(self,?content):
'?数据写入文件?'
with?open(self.kw+'/'+self.kw+'.txt',?'w')?as?f:
f.write(content)
def?log(self,?msg):
'?自定义log函数?'
print?u'%s:?%s'?%?(time.strftime('%Y-%m-%d?%H:%M:%S'),?msg)
def?need_verify(self,?selenium_html):
'?有时候对方会封锁ip,这里做一下判断,检测html中是否包含id=verify_change的标签,有的话,代表被重定向了,提醒过一阵子重试?'
return?pq(selenium_html)('#verify_change').text()?!=?''
def?create_dir(self):
'创建文件夹'
if?not?os.path.exists(self.kw):
os.makedirs(self.kw)
def?run(self):
'?爬虫入口函数?'
#Step?0?:??创建公众号命名的文件夹
self.create_dir()
#?Step?1:GET请求到搜狗微信引擎,以微信公众号英文名称作为查询关键字
self.log(u'开始获取,微信公众号英文名为:%s'?%?self.kw)
self.log(u'开始调用sougou搜索引擎')
sougou_search_html?=?self.get_search_result_by_kw()
#?Step?2:从搜索结果页中解析出公众号主页链接
self.log(u'获取sougou_search_html成功,开始抓取公众号对应的主页wx_url')
wx_url?=?self.get_wx_url_by_sougou_search_html(sougou_search_html)
self.log(u'获取wx_url成功,%s'?%?wx_url)
#?Step?3:Selenium+PhantomJs获取js异步加载渲染后的html
self.log(u'开始调用selenium渲染html')
selenium_html?=?self.get_selenium_js_html(wx_url)
#?Step?4:?检测目标网站是否进行了封锁
if?self.need_verify(selenium_html):
self.log(u'爬虫被目标网站封锁,请稍后再试')
else:
#?Step?5:?使用PyQuery,从Step?3获取的html中解析出公众号文章列表的数据
self.log(u'调用selenium渲染html完成,开始解析公众号文章')
articles?=?self.parse_wx_articles_by_html(selenium_html)
self.log(u'抓取到微信文章%d篇'?%?len(articles))
#?Step?6:?把微信文章数据封装成字典的list
self.log(u'开始整合微信文章数据为字典')
articles_list?=?self.switch_arctiles_to_list(articles)
#?Step?7:?把Step?5的字典list转换为Json
self.log(u'整合完成,开始转换为json')
data_json?=?json.dumps(articles_list)
#?Step?8:?写文件
self.log(u'转换为json完成,开始保存json数据到文件')
self.save_file(data_json)
self.log(u'保存完成,程序结束')
#?main
if?__name__?==?'__main__':
gongzhonghao=raw_input(u'输入要爬取的公众号')
if?not?gongzhonghao:
gongzhonghao='python6359'
weixin_spider(gongzhonghao).run()
第二版代码:
对代码进行了一些优化和整改,主要:
1.增加了excel存贮
2.对获取文章内容规则进行修改
3.丰富了注释
本程序已知缺陷: 如果公众号的文章内容包括视视频,可能会报错。
[python]?view plain?copy
#!/usr/bin/python
#?coding:?utf-8
python:消息推送 - 企业微信机器人推送
实现推送的处理步骤:
创建机器人:
1、登录企业 - 拉取创建3人及其以上的群组 - 点击右键群设置 - 添加机器人,如图:
新建机器人:
给机器人取名:
创建完成:
获取机器人webhook: 复制webhook
安装Python第三方库:requests。
pip install requests
按照对应的机器人文档说明,将包装后推送内容进行接口请求:
运行后即可得出类似下面的结果: