爬虫抓取微信公众号文章及阅读点赞总结
2017-04-25 14:11
603 查看
爬虫抓取微信公众号文章及阅读点赞总结
近期我司接到任务抓取省内各个大学及教育局的微信公众号传播力度排名,根据调研sogou微信搜索数据还是可以的,随即采用python语言去进行抓取;过程中也遇到很多问题,由于sogou的反爬做得太恶心了总是封ip导致我需要大量的代理去抓取,这里要感谢github上的一个代理池项目。不过目前抓来的免费代理质量都不太好,大部分都被sogou封掉了。这里我也有买过一些代理,目前有发现讯代理的质量还可以。大概说一下爬虫抓sogou的步骤吧。先抓取wxid(搜索要用到)
目标时间段分片 10天一次搜索(避免超过10页需要登录)
获得时间片内的记录数做分页
循环分页数拼接url携带代理请求
bs4分析网页内容 遇到验证码更换代理重新请求
正则匹配出列表页中的详情页链接 多线程请求阅读点赞
结果插入mysql
以上操作使用多进程提升速度
获取wxid
这里用selenium去获取配置文件的公众号的wxidclass Craw_openid: __getWxIdApi = "http://weixin.sogou.com/weixin?zhnss=1&type=1&ie=utf8&query=" __driver = webdriver.Chrome() __wechatIds = wechatIds['wxId'] def __init__(self): pass def getWxId(self): for x in self.__wechatIds: url = self.__getWxIdApi + str(x[0]) self.__driver.get(url) while (self.checkCaptcha(self.__driver.page_source) == False): time.sleep(0.5) reg = re.compile(r'"openid":"(.+?)"') reg2 = re.compile(r'"sourcename":"(.+?)"') wxId = re.findall(reg, self.__driver.page_source)[0] try: wxName = re.findall(reg2, self.__driver.page_source)[0] except Exception as e: wxName = '' print "['%s' , '%s' , '%s' , '%s']," % (x[0], x[1] , wxId , wxName) def checkCaptcha(self , content): soup = bs4.BeautifulSoup(content, 'html.parser', from_encoding='gb18030') strs = soup.select('.s1') if strs: temp = re.compile(r'>(.*?)</span>').findall(str(strs[0]))[0] if temp == '您的访问出错了': 910a return False else: return True else: return True
时间分段
这里我统计的是2016年的def getBetweenDay(self): for x in xrange(1, 13): days = calendar.monthrange(self.__year, x)[1] temp = str(x) if len(temp) == 1: temp = '0' + str(temp) ss = str(days - 20) if len(ss) == 1: ss = '0' + ss self.__dates.append({x: [str(self.__year) + '-' + temp + '-01', str(self.__year) + '-' + temp + '-' + ss]}) self.__dates.append({x: [str(self.__year) + '-' + temp + '-' + str(days - 19), str(self.__year) + '-' + temp + '-' + str(days - 10)]}) self.__dates.append({x: [str(self.__year) + '-' + temp + '-' + str(days - 9), str(self.__year) + '-' + temp + '-' + str(days)]}) return self.__dates
文章数和阅读点赞
文章数即翻页列表数量的总数,阅读点赞可以替换详情页的前缀为getcommentdef getSee(self): if self.__urlList: self.__totalNum = len(self.__urlList) for x in self.__urlList: url = x.replace('mp.weixin.qq.com/s?src' , 'mp.weixin.qq.com/mp/getcomment?src') json = self.getContent(url) readed = eval(json)['read_num'] liked = eval(json)['like_num'] if int(readed) >= 100000: self.__highRead += 1 if readed > self.__topReaded: self.__topReaded = readed if liked > self.__topLiked: self.__topLiked = liked self.__readed += readed self.__liked += liked
其他
抓取的方法有很多,重点是sogou的反爬虫做得比较严格(毕竟是专业做搜索引擎的),所以要在代理上下一些功夫,如果抓取不需要阅读点赞,可以参考github上一个go语言写的中间人攻击的方法,不需要代理,但是有可能微信号被封。此项目的github地址我就不写了,目前改动比较大暂时没时间去维护。如需沟通交流请加我企鹅号602156652。
相关文章推荐
- 使用fiddler自动化抓取微信公众号文章的点赞与阅读数
- 微信公众号文章爬虫抓取实现原理!
- 微信公众号文章采集 爬取微信文章 采集公众号的阅读数和点赞数?
- 微信公众号文章采集 爬取微信文章 采集公众号的阅读数和点赞数?
- 微信公众号文章采集 爬取微信文章 采集公众号的阅读数和点赞数?
- python爬虫(17)爬出新高度_抓取微信公众号文章(selenium+phantomjs)(上)
- 微信公众号订阅号留言点赞采集抓取爬虫
- 微信公众号文章采集 爬取微信文章 采集公众号的阅读数和点赞数?
- 微信公众号文章-阅读点赞数-评论采集方案
- 如何获取微信公众号文章的阅读量和点赞数?
- [Python爬虫] 之十五:Selenium +phantomjs根据微信公众号抓取微信文章
- 微信公众号文章采集 爬取微信文章 采集公众号的阅读数和点赞数?
- 微信公众号文章采集 爬取微信文章 采集公众号的阅读数和点赞数?
- 微信公众号文章内容阅读数采集抓取
- 如何有效的监控微信公众号发布的文章的阅读数和点赞数变化
- 如何获取微信文章阅读数和点赞数
- 微信文章阅读数点赞数查询API接口及实现(小数据量)
- 你所不知道的 Kindle - 阅读微信公众号文章
- 搜狗微信公众号文章抓取