python抓取数据推送到微信(python抓取网络数据)

http://www.itjxue.com  2023-04-08 06:53  来源:未知  点击次数: 

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

按照对应的机器人文档说明,将包装后推送内容进行接口请求:

运行后即可得出类似下面的结果:

(责任编辑:IT教学网)

更多
上一篇:没有了

推荐网站经济文章