获取某微信公众号所有文章且进行分析 - 简书

标签: | 发表时间:2017-11-27 11:18 | 作者:
出处:http://www.jianshu.com

最新文章: 获取微信公众号所有历史文章链接地址
2017.4.19

微信公众平台上面的公众号很多,里面各种文章都有,很多很杂乱。不过在这些文章中,肯定是会存在自己所认为的 精品的文章的。

所以如果我自己能够编写出一个程序,用来获取自己喜欢的 某个微信公众号上的文章,获取文章的 浏览量点赞量,然后加以简单的数据分析,那么最终得到的文章列表,肯定就会是比较好的文章了。

这里需要注意的是,通过编写爬虫获取 搜狗微信搜索中的微信文章,并不能得到 浏览量点赞量这两个关键性的数据(编程功力入门级别的我)。所以我就另辟蹊径,通过 清博指数这个网站,来获取我所想要的数据。

注:目前已经找到方法可以 获得搜狗微信中文章的浏览量和点赞量。2017.02.03

其实清博指数这个网站上面的数据都很齐全了,可以看到微信公众号的榜单,可以看到每日每周每月的热文,但是还是我上面所说的, 内容比较杂乱,那些阅读量很高的文章,有可能就是一些 家长级别的人才会喜欢的文章。

当然,我也可以在这个网站上搜索特定的微信公众号,然后看它的历史文章。清博指数做的也已经很细了,可以根据阅读数、点赞数等排序文章。但是,我所需要的可能是 点赞数除以阅读数这个很简单的指标,所以我便需要将上面的数据通过爬虫抓取下来,进行下简单的分析。顺便可以练练手,无聊的慌。

开始程序

以微信公众号 简七理财为例,我需要先打开其文章界面,下面是其url:

      http://www.gsdata.cn/query/article?q=jane7ducai&post_time=0&sort=-3&date=&search_field=4&page=1

然后我通过分析发现,它总共有25页文章,也就是最后一页文章的url是下面这样,注意只有最后一个参数是不一样的:

      http://www.gsdata.cn/query/article?q=jane7ducai&post_time=0&sort=-3&date=&search_field=4&page=25

所以就可以编写一个函数,重复调用25次就可以了。

BeautifulSoup抓取网页上自己所需要的数据

忘了说了,我编写程序的语言用的是 Python,其爬虫入门很简单。然后 BeautifulSoup是一个网页分析的插件,用来获取文章中的 HTML数据很方便。

接下来就是分析网页结构了:


我用红框框起来的是两篇文章,它们在网页的结构代码都是一致的。然后通过 审查元素我可以看到网页的对应代码,这时候便可以编写出爬取的规则出来,下面我直接是写成了一个函数:

      # 获取网页中的数据
def get_webdata(url):
    headers = {
        'user-agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36'
    }
    r = requests.get(url,headers=headers)
    c = r.content
    b = BeautifulSoup(c)
    data_list = b.find('ul',{'class':'article-ul'})
    data_li = data_list.findAll('li')
    for i in data_li:
        # 替换标题中的英文双引号,防止插入数据库时出现错误
        title = i.find('h4').find('a').get_text().replace('"','\'\'')
        link = i.find('h4').find('a').attrs['href']
        source = i.find('span',{'class':'blue'}).get_text()
        time = i.find('span',{'class':'blue'}).parent.next_sibling.next_sibling.get_text().replace('发布时间:'.decode('utf-8'),'')
        readnum = int(i.find('i',{'class':'fa-book'}).next_sibling)
        praisenum = int(i.find('i',{'class':'fa-thumbs-o-up'}).next_sibling)
        insert_content(title,readnum,praisenum,time,link,source)

此函数包含了用 requests先来获取网页的内容,然后传给 BeautifulSoup用来分析提取我所需要的数据,然后在通过 insert_content函数数据库中,数据库的知识本次就不做涉及,全部代码会在下面给出,也算是怕自己之后遗忘。

个人认为,其实 BeautifulSoup的知识点只需要掌握我上面代码所用到的 find,findAll,get_text(),attrs['src']等几个常用的语句就可以了。

循环抓取,且写入数据库中

最一开始的url还记得吗,总共需要抓取25个页面,这个25个页面的url其实就最后面的参数不一样,所以完全可以给定一个基础url,然后用 for函数直接生成25个url就可以了:

      # 生成需要爬取的网页链接且进行爬取
def get_urls_webdatas(basic_url,range_num):
    for i in range(1,range_num+1):
        url = basic_url + str(i)
        print url
        print ''
        get_webdata(url)
        time.sleep(round(random.random(),1))

basic_url = 'http://www.gsdata.cn/query/article?q=jane7ducai&post_time=0&sort=-3&date=&search_field=4&page='
get_urls_webdatas(basic_url,25)

如上面的代码, get_urls_webdataas这个函数传入了两个参数,便是基础的url和需要的页面数了,可以看到我在代码的最后一行对此函数进行了调用。

此函数还调用了上面我抓取页面所编写的函数 get_webdata,这样的话,25个页面上的文章数据都会一次写入数据库中。

然后请注意下面这个小技巧:

      time.sleep(round(random.random(),1))

我每用程序爬取完一个网页,此语句便会随机生成一个1s内的时间段,然后休息这么一个很小的时间段,然后接着继续抓取下一个页面, 可以防止被ban

拿到最终数据

先给出我此次编写程序所剩下的代码:

      #coding:utf-8
import requests,MySQLdb,random,time
from bs4 import BeautifulSoup

def get_conn():
    conn = MySQLdb.connect('localhost','root','0000','weixin',charset='utf8')
    return conn
def insert_content(title,readnum,praisenum,time,link,source):
    conn = get_conn()
    cur = conn.cursor()
    print title,readnum
    sql = 'insert into weixin.gsdata(title,readnum,praisenum,time,link,source) values ("%s","%s","%s","%s","%s","%s")' % (title,readnum,praisenum,time,link,source)
    cur.execute(sql)
    conn.commit()
    cur.close()
    conn.close()

包含开头的 import一些插件,然后剩下的这两个函数便是 数据库操作相关的函数。

最终我通过在数据库中 select * from weixin.gsdata;,便可以获取到我所抓取到的此微信公众号的文章数据,包括标题、发布日期、阅读量、点赞量、访问url等信息。


分析数据

这些数据只是最原始的数据,我可以将上面的数据导入到 Excel中,进行简单的分析处理,便可以获得我所需要的文章列表。分析思路有下:

  • 我可以按照点赞量排序
  • 我可以按照阅读量排序
  • 我可以用点赞量除以阅读量,然后由大到小排序
  • 我还可以加入时间的因素

我所喜欢的微信公众号就那么几个,我完全可以通过此程序将我所喜欢的微信公众号的文章全部抓取下来,我愿意的话,可以进一步筛选出更加优质的文章。

程序很简单,但是简单的程序可以实现生活中的一些想法,难道不是一件很美妙的事情么。

相关 [微信 公众 文章] 推荐:

持续更新,微信公众号文章批量采集系统的构建

- -
我从2014年就开始做微信公众号内容的批量采集,最开始的目的是为了做一个html5的垃圾内容网站. 当时垃圾站采集到的微信公众号的内容很容易在公众号里面传播. 当时批量采集特别好做,采集入口是公众号的历史消息页. 这个入口到现在也是一样,只不过越来越难采集了. 采集的方式也更新换代了好多个版本. 后来在2015年html5垃圾站不做了,转向将采集目标定位在本地新闻资讯类公众号,前端显示做成了app.

获取某微信公众号所有文章且进行分析 - 简书

- -
获取微信公众号所有历史文章链接地址. 微信公众平台上面的公众号很多,里面各种文章都有,很多很杂乱. 不过在这些文章中,肯定是会存在自己所认为的. 所以如果我自己能够编写出一个程序,用来获取自己喜欢的. 某个微信公众号上的文章,获取文章的. 点赞量,然后加以简单的数据分析,那么最终得到的文章列表,肯定就会是比较好的文章了.

浅谈微信公众平台

- - 微博之博
过去的这个周末,应该大部分人都在家里调戏 微信公共 平台. 有人幸灾乐祸,有人稍作恐慌:芸芸众生相. 注册尝试了一个微信 公众平台,总结一句话:龙生龙,凤生凤. 以前曾经有人说中国的互联网,要么生要么死要么被腾讯. 企鹅家族优良的传统,势必不会放过 微博帝国的3亿用户群的潜在商业价值,所以这次爱起哄的企鹅家族,又一次决定露出起哄天性,悄悄的推出了微信公众平台.

微信公众平台开发(一)

- - BlogJava-首页技术区
  开始微信公众平台的开发,我们首先要了解微信平台可以帮助我们做哪些事情. 使用您的公众账号登陆http://mp.weixin.qq.com/,选择菜单--高级功能-开发模式--查看文档,即能看到微信公众平台目前所能开发的功能. 接受用户发送给您公众账号的消息. 需要特别说明的是,发送消息和回复消失是一个连贯的过程,只能在一个对话中完成.

微信公众平台接口开发

- - CSDN博客互联网推荐文章
随着微信公众平台的开放,微信营销推广也越发受到重视. 现在企业越来越注重求职者是否拥有“微信公众平台接口开发”的经验. 现在参考资料介绍下微信公众平台接口开发模式:. 首先你得有个微信公众平台账号,注册地址:http://mp.weixin.qq.com/. 开发者提交信息后,微信服务器将发送GET请求到填写的URL上,GET请求携带四个参数:.

微信公众平台开发入门

- - Web前端 - ITeye博客
在这篇微信公众平台开发教程中,我们假定你已经有了PHP语言程序、MySQL数据库、计算机网络通讯、及HTTP/XML/CSS/JS等基础. 我们将使用微信公众账号方倍工作室作为讲解的例子,二维码见底部. 本系列教程将引导你完成如下任务:. 我们使用SAE新浪云计算平台作为服务器资源,并且申请PHP环境+MySQL数据库作为程序运行环境.

如何实现一个基本的微信文章分类器

- - SegmentFault 最新的文章
本文源地址: http://www.fullstackyang.com/...,转发请注明该地址或segmentfault地址,谢谢. 微信公众号发布的文章和一般门户网站的新闻文本类型有所不同,通常不能用现有的文本分类器直接对这些文章进行分类,不过文本分类的原理是相通的,本文以微信公众号文章为对象,介绍朴素贝叶斯分类器的实现过程.

微信公众平台增加微信小店功能 可快速开店

- - TechWeb 今日焦点 RSS阅读
微信公众平台增加微信小店功能 可快速开店(TechWeb配图). 【TechWeb报道】5月29日消息,腾讯今日发布消息称,微信公众平台更新增加了微信小店功能,微信小店基于微信支付,包括添加商品、商品管理、订单管理、货架管理、维权等功能,开发者可使用接口批量添加商品,快速开店. 已接入微信支付的公众号,可在服务中心中申请开通微信小店功能.

微信公众平台:移动推送(Push)平台

- - 天涯海阁|Web2.0Share
之前曾经写过一个文章《 移动互联网的未来:基于情境/兴趣的推送》,至今我也觉得这个在未来会是有着巨大想想空间的移动生活方式. 之前其实也有不少初创企业在Push这个领域努力,不过效果却都不好,所以其实本质而言,要构建Push这样的平台,需要吸引大量的内容、媒体、品牌来提供Push内容,而对于内容、媒体、品牌而言,最在意的是这个平台有没有用户,而微信可能已经到了可以去构建这样一个信息推送平台的阶段.

一个程序员关注的微信公众账号

- - ITeye博客
春节回家的时候在家里无聊,开始玩微信,后面接触微信公众账号,陆续的关注了很多,每天至少会花半小时在这些账号的文章上面,有的文笔不错,有的十分简洁,但是都比较真实,值得一看,下面把认为不错的账号推荐一下. 我是一名程序员,关注产品、技术、移动以及八卦,如果和我口味类似,这些账号可以关注一下. 微信号:WebNotes.