【微信公众号采集】通过搜狗的采集思路以及python实现的代码

我们知道微信公众号的内容比较有价值,原创性的文章比较多,如果能采集微信公众号,那就好了。因此,均益写了一段python代码,用于通过搜狗入口采集公众号的内容。
先说一下思路:通过搜狗搜索微信号,获取到这个微信号的文章列表页(现在只显示前面10篇文章),然后通过列表页获取文章页,并采集文章内容。
如图:
微信公众号采集通过搜狗的采集思路以及python实现的代码
微信公众号采集通过搜狗的采集思路以及python实现的代码
微信公众号采集通过搜狗的采集思路以及python实现的代码

实现这个功能的python代码已经写好,里面有注释,相信懂python都能看的明白

 
#coding:utf-8
#采集搜狗微信
 
import pycurl,StringIO,json,re,time
from lxml import etree
 
def caiji(url):
	headers = [
    "User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 SE 2.X MetaSr 1.0",
    "Cookie:m=9E311C74B018D4A8858DF555C61A2E92; IPLOC=CN4403; SUV=00322678777A98C357BB2E859CA75470; usid=2cjwZgHDa8zi4yjB; SNUID=4812F0FD8B8FB1278CDD12588B398BD4; SUID=C3987A773020910A0000000057BB3056; GOTO=Af99046; ABTEST=0|1471886717|v1; weixinIndexVisited=1; sct=2",
	]
	c = pycurl.Curl()   #通过curl方法构造一个对象
	c.setopt(pycurl.REFERER, 'http://weixin.sogou.com/')    #设置referer
	c.setopt(pycurl.FOLLOWLOCATION, True)   #自动进行跳转抓取
	c.setopt(pycurl.MAXREDIRS,5)            #设置最多跳转多少次
	c.setopt(pycurl.CONNECTTIMEOUT, 60)     #设置链接超时
	c.setopt(pycurl.TIMEOUT,120)            #下载超时
	c.setopt(pycurl.ENCODING, 'gzip,deflate')   #处理gzip内容,有些傻逼网站,就算你给的请求没有gzip,它还是会返回一个gzip压缩后的网页
	# c.setopt(c.PROXY,ip)  # 代理
	c.fp = StringIO.StringIO()  
	c.setopt(pycurl.URL, url)   #设置要访问的URL
	c.setopt(pycurl.HTTPHEADER,headers)     #传入请求头
	# c.setopt(pycurl.POST, 1)
	# c.setopt(pycurl.POSTFIELDS, data)     #传入POST数据
	c.setopt(c.WRITEFUNCTION, c.fp.write)   #回调写入字符串缓存
	c.perform()     
	html = c.fp.getvalue()  #返回源代码
 
	return html
 
def search(req,html):
	data = re.search(req,html)
	if data:
		return data.group(1)
	else:
		return 'no'
 
 
#微信号列表
weiHao = ['lang-club','bazaarstar','duliyumovie']
 
#以第一个微信号为例
query = weiHao[0]
 
url = 'http://weixin.sogou.com/weixin?type=1&query=%s' % query
 
html = caiji(url)
selectors = etree.HTML(html)
gongHao = selectors.xpath('//*[@id="sogou_vr_11002301_box_0"]/@href')
title = search(r'<title>(.*)</title>',html)
print title
 
 
#采集公众号的文章
url = gongHao[0]
html = caiji(url)
title = search(r'<title>(.*)</title>',html)
#搜狗微信防采集,需要输入验证码,程序将不能正常执行
print title
 
 
wenKuai = search(r'var msgList(.*)',html) #文章块的js代码
 
wenUrl = re.findall(r'/s\?timestamp=(.*?)&quot;,&quot;source_url',wenKuai)#这是文章的URL
 
firsturl = 'http://mp.weixin.qq.com/s?timestamp=%s' % wenUrl[0] #组合成第一篇文章url
 
 
html = caiji(firsturl)
title = search(r'<title>(.*)</title>',html) #文章标题
yuanchuang = search(r'<span id="copyright_logo" class="rich_media_meta meta_original_tag">(原创)</span>',html) #文章是否原创
fabushijian = search(r'<em id="post-date" class="rich_media_meta rich_media_meta_text">([\d-]+)</em>',html) #发布时间
zuozhe = search(r'<em class="rich_media_meta rich_media_meta_text">(.*)</em>',html)#作者
zhengwen = search(r'<div class="rich_media_content " id="js_content">([\s\S]*?)</div>',html)#正文
print title,fabushijian,yuanchuang,zuozhe

虽然能够采集到文章内容了,但是由于搜狗防采集,经常需要更换ip和验证码。均益没有更多ip的,所以不能批量采集。欢迎有ip资源的朋友来测试或者合作。均益还收集了18个分类5万多个公众号的id,想要的朋友也可以联系。

6 comments
  1. 林志超
    林志超
    2016年11月11日 at 上午8:55

    哎呦,不错哦!欢迎互访

    Reply
回复 工控资料窝Cancel

Your email address will not be published. Required fields are marked *