python監控微信朋友圈
1. Python 分享到朋友圈 功能怎麼實現
首先要說下,比較兩個是否相等,應該用==才對。
關於運行字元串,可以用eval。
>>> a=10
>>> c="a==10"
>>> if eval(c):
print "a=10"
a=10
>>>
2. python怎麼抓取微信閱
抓取微信公眾號的文章
一.思路分析
目前所知曉的能夠抓取的方法有:
1、微信APP中微信公眾號文章鏈接的直接抓取(http://mp.weixin.qq.com/s?__biz=MjM5MzU4ODk2MA==&mid=2735446906&idx=1&sn=&scene=0#rd)
2、通過微信合作方搜狗搜索引擎(http://weixin.sogou.com/),發送相應請求來間接抓取
第1種方法中,這種鏈接不太好獲取,而且他的規律不是特別清晰。
因此本文採用的是方法2----通過給 weixin.sogou.com 發送即時請求來實時解析抓取數據並保存到本地。
二.爬取過程
1、首先在搜狗的微信搜索頁面測試一下,這樣能夠讓我們的思路更加清晰
在搜索引擎上使用微信公眾號英文名進行「搜公眾號」操作(因為公眾號英文名是公眾號唯一的,而中文名可能會有重復,同時公眾號名字一定要完全正確,不然可能搜到很多東西,這樣我們可以減少數據的篩選工作,只要找到這個唯一英文名對應的那條數據即可),即發送請求到'http://weixin.sogou.com/weixin?type=1&query=%s&ie=utf8&_sug_=n&_sug_type_= ' % 'python',並從頁面中解析出搜索結果公眾號對應的主頁跳轉鏈接。
2.獲取主頁入口內容
使用request , urllib,urllib2,或者直接使用webdriver+phantomjs等都可以
這里使用的是request.get()的方法獲取入口網頁內容
[python]view plain
#爬蟲偽裝頭部設置
self.headers={'User-Agent':'Mozilla/5.0(WindowsNT6.3;WOW64;rv:51.0)Gecko/20100101Firefox/51.0'}
#設置操作超時時長
self.timeout=5
#爬蟲模擬在一個request.session中完成
self.s=requests.Session()
#搜索入口地址,以公眾為關鍵字搜索該公眾號
defget_search_result_by_keywords(self):
self.log('搜索地址為:%s'%self.sogou_search_url)
returnself.s.get(self.sogou_search_url,headers=self.headers,timeout=self.timeout).content
#獲得公眾號主頁地址
defget_wx_url_by_sougou_search_html(self,sougou_search_html):
doc=pq(sougou_search_html)
#printdoc('p[class="tit"]')('a').attr('href')
#printdoc('div[class=img-box]')('a').attr('href')
#通過pyquery的方式處理網頁內容,類似用beautifulsoup,但是pyquery和jQuery的方法類似,找到公眾號主頁地址
returndoc('div[class=txt-box]')('p[class=tit]')('a').attr('href')
#使用webdriver載入公眾號主頁內容,主要是js渲染的部分
defget_selenium_js_html(self,url):
browser=webdriver.PhantomJS()
browser.get(url)
time.sleep(3)
#執行js得到整個頁面內容
html=browser.execute_script("returndocument.documentElement.outerHTML")
returnhtml
#獲取公眾號文章內容
defparse_wx_articles_by_html(self,selenium_html):
doc=pq(selenium_html)
print'開始查找內容msg'
returndoc('div[class="weui_media_boxappmsg"]')
#有的公眾號僅僅有10篇文章,有的可能多一點
#returndoc('div[class="weui_msg_card"]')#公眾號只有10篇文章文章的
#!/usr/bin/python
#coding:utf-8
importsys
reload(sys)
sys.setdefaultencoding('utf-8')
fromurllibimportquote
frompyqueryimportPyQueryaspq
fromseleniumimportwebdriver
importrequests
importtime
importre
importjson
importos
classweixin_spider:
def__init__(self,kw):
'構造函數'
self.kw=kw
#搜狐微信搜索鏈接
#self.sogou_search_url='http://weixin.sogou.com/weixin?type=1&query=%s&ie=utf8&_sug_=n&_sug_type_='%quote(self.kw)
self.sogou_search_url='http://weixin.sogou.com/weixin?type=1&query=%s&ie=utf8&s_from=input&_sug_=n&_sug_type_='%quote(self.kw)
#爬蟲偽裝
self.headers={'User-Agent':'Mozilla/5.0(WindowsNT10.0;WOW64;rv:47.0)Gecko/20100101FirePHP/0refox/47.0FirePHP/0.7.4.1'}
#操作超時時長
self.timeout=5
self.s=requests.Session()
defget_search_result_by_kw(self):
self.log('搜索地址為:%s'%self.sogou_search_url)
returnself.s.get(self.sogou_search_url,headers=self.headers,timeout=self.timeout).content
defget_wx_url_by_sougou_search_html(self,sougou_search_html):
'根據返回sougou_search_html,從中獲取公眾號主頁鏈接'
doc=pq(sougou_search_html)
#printdoc('p[class="tit"]')('a').attr('href')
#printdoc('div[class=img-box]')('a').attr('href')
#通過pyquery的方式處理網頁內容,類似用beautifulsoup,但是pyquery和jQuery的方法類似,找到公眾號主頁地址
returndoc('div[class=txt-box]')('p[class=tit]')('a').attr('href')
defget_selenium_js_html(self,wx_url):
'執行js渲染內容,並返回渲染後的html內容'
browser=webdriver.PhantomJS()
browser.get(wx_url)
time.sleep(3)
#執行js得到整個dom
html=browser.execute_script("returndocument.documentElement.outerHTML")
returnhtml
defparse_wx_articles_by_html(self,selenium_html):
'從selenium_html中解析出微信公眾號文章'
doc=pq(selenium_html)
returndoc('div[class="weui_msg_card"]')
defswitch_arctiles_to_list(self,articles):
'把articles轉換成數據字典'
articles_list=[]
i=1
ifarticles:
forarticleinarticles.items():
self.log(u'開始整合(%d/%d)'%(i,len(articles)))
articles_list.append(self.parse_one_article(article))
i+=1
#break
returnarticles_list
defparse_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='http://mp.weixin.qq.com'+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
}
defparse_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]iflen(rs)>0else'')
returnrs[0]iflen(rs)>0else''
defparse_content_by_url(self,url):
'獲取文章詳情內容'
page_html=self.get_selenium_js_html(url)
returnpq(page_html)('#js_content')
defsave_content_file(self,title,content):
'頁面內容寫入文件'
withopen(title,'w')asf:
f.write(content)
defsave_file(self,content):
'數據寫入文件'
withopen(self.kw+'/'+self.kw+'.txt','w')asf:
f.write(content)
deflog(self,msg):
'自定義log函數'
printu'%s:%s'%(time.strftime('%Y-%m-%d%H:%M:%S'),msg)
defneed_verify(self,selenium_html):
'有時候對方會封鎖ip,這里做一下判斷,檢測html中是否包含id=verify_change的標簽,有的話,代表被重定向了,提醒過一陣子重試'
returnpq(selenium_html)('#verify_change').text()!=''
defcreate_dir(self):
'創建文件夾'
ifnotos.path.exists(self.kw):
os.makedirs(self.kw)
defrun(self):
'爬蟲入口函數'
#Step0:創建公眾號命名的文件夾
self.create_dir()
#Step1:GET請求到搜狗微信引擎,以微信公眾號英文名稱作為查詢關鍵字
self.log(u'開始獲取,微信公眾號英文名為:%s'%self.kw)
self.log(u'開始調用sougou搜索引擎')
sougou_search_html=self.get_search_result_by_kw()
#Step2:從搜索結果頁中解析出公眾號主頁鏈接
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)
#Step3:Selenium+PhantomJs獲取js非同步載入渲染後的html
self.log(u'開始調用selenium渲染html')
selenium_html=self.get_selenium_js_html(wx_url)
#Step4:檢測目標網站是否進行了封鎖
ifself.need_verify(selenium_html):
self.log(u'爬蟲被目標網站封鎖,請稍後再試')
else:
#Step5:使用PyQuery,從Step3獲取的html中解析出公眾號文章列表的數據
self.log(u'調用selenium渲染html完成,開始解析公眾號文章')
articles=self.parse_wx_articles_by_html(selenium_html)
self.log(u'抓取到微信文章%d篇'%len(articles))
#Step6:把微信文章數據封裝成字典的list
self.log(u'開始整合微信文章數據為字典')
articles_list=self.switch_arctiles_to_list(articles)
#Step7:把Step5的字典list轉換為Json
self.log(u'整合完成,開始轉換為json')
data_json=json.mps(articles_list)
#Step8:寫文件
self.log(u'轉換為json完成,開始保存json數據到文件')
self.save_file(data_json)
self.log(u'保存完成,程序結束')
#main
if__name__=='__main__':
gongzhonghao=raw_input(u'輸入要爬取的公眾號')
ifnotgongzhonghao:
gongzhonghao='python6359'
weixin_spider(gongzhonghao).run()
#!/usr/bin/python
#coding:utf-8
[python]view plain
3.獲取公眾號地址
從獲取到的網頁內容中,得到公眾號主頁地址, 這一步驟有很多方法, beautifulsoup、webdriver,直接使用正則,pyquery等都可以
這里使用的是pyquery的方法來查找公眾號主頁入口地址
[python]view plain
4.獲取公眾號主頁的文章列表
首先需要載入公眾號主頁,這里用的是phantomjs+webdriver, 因為這個主頁的內容需要JS 渲染載入,採用之前的方法只能獲得靜態的網頁內容
[python]view plain
得到主頁內容之後,獲取文章列表,這個文章列表中有我們需要的內容
[python]view plain
5.解析每一個文章列表,獲取我們需要的信息
6.處理對應的內容
包括文章名字,地址,簡介,發表時間等
7.保存文章內容
以html的格式保存到本地
同時將上一步驟的內容保存成excel 的格式
8.保存json數據
這樣,每一步拆分完,爬取公眾號的文章就不是特別難了。
三、源碼
第一版源碼如下:
[python]view plain
第二版代碼:
對代碼進行了一些優化和整改,主要:
1.增加了excel存貯
2.對獲取文章內容規則進行修改
3.豐富了注釋
本程序已知缺陷: 如果公眾號的文章內容包括視視頻,可能會報錯。
[python]view plain
3. 如何利用Python網路爬蟲抓取微信好友數量以及
可以用wxpy模塊來
4. python怎麼能抓微信公眾號文章的閱讀數
思路一,利用rss生成工具,將搜狗的微信搜索結果生成一個rss,然後通過rss監控這個公眾號的文章是否更新。(理論上應該可行,但沒試過)
思路二,自己做一個桌面瀏覽器,IE內核。用這個瀏覽器登錄web微信,這個微信帳號關注你想抓取的公眾號,這樣就可以監控到是這些公眾號是否已更新,更新後鏈接是什麼,從而達到抓取數據的目的。(使用過,效率不高,但非常穩定)
思路三,通過修改android的微信客戶端來實現(這個方法是我們曾經使用過一段時間的)
思路四,想辦法越過驗證直接取到鏈接,再通過鏈接取到數據。
5. 怎麼利用python或R分析我的微博或者朋友圈
一. 你在瀏覽微博的時候,受到哪些用戶的影響。
1. 抓取你微博的關注列表,通過一定的條件篩選一部分用戶,繼續抓他們的關注列表,這樣抓兩到三層就行了,不然數據太大了。
2. 對抓取的用戶進行影響力建模,例如,用戶最近兩個月的微博的轉發評論和點贊數據
3. 最後分析出哪些用戶對你的影響最大
二. 基於地理位置的分析
1. 抓取以某個城市為發微博的地理位置的微博數據,並且抓取發微博的用戶的相關信息
2. 對數據清洗,通過用戶資料篩選出是否土著居民,還是旅遊出差之類的數據
3. 對數據分析,通過發微博的時間啊,某個地點發微博的次數啊,發微博出現最多的關鍵詞
這些應該能得到一些有意思的數據
三. 自然語言處理
微博的大量的文本數據可以做自然語言處理,情感分析之類的很多研究
四. 熱點事件追蹤
1. 通過關鍵詞的搜索,跟蹤熱點事件
2. 很多熱點事情都是某個微博開始發酵的,可以抓取轉發路徑,找出哪些是重要的轉發節點,
抓取評論內容,看看網友對這件事情的態度。
3. 監控微博博主的粉絲增加數量的變化
五. 計算機視覺相關研究
1. 抓取微博出現的圖片,做計算視覺相關的研究
2. 抓取微博用戶的頭像,做人臉識別之類的,應該很有意思。
六. 個人微博數據分析
1. 發微博時間
2. 微博出現的關鍵詞
3. 你點過哪些贊,評論過哪些微博。
4. 和哪些人發過私信,這些都可以研究,關鍵是找到合適的模型
6. Python查看微信被哪些好友刪除,不用群發
在終端中執行:
git clone https github.com/0x5e/wechat-deleted-friends.git
cd wechat-deleted-friends
python wdf.py
然後按照提示操作就可以了.
完成之後手動刪除生成的一個群聊, 不要在裡面說話, 不說話好友們是不知情的.
7. 用python能爬到微信朋友圈動態嗎
這個一般是比較困難的
首先你需要相應的介面,另外還需要朋友圈相關的許可權等
8. python爬取微信好朋友圈怎麼實現
有一個微信網頁版.模擬登陸是可以登陸上去的.但是看不了朋友圈.只能通過手機的方式進行爬取了.
9. python可以實現對微信朋友圈的抓取嗎
在 Hibernate 中,如果將屬性 id 定義為 Integer 類型,那麼 Hibernate 就可以根據其 值是否為 null 而判斷一個對象是否是臨時的,如果將 id 定義為了 int 類型,還需要在 hbm 映 射文件中設置其 unsaved-value 屬性為 0。
10. 如何使用python在微信
在github , itchat了解一下