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

在线工具:微信文章转PDF

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

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

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

注:目前已经找到方法可以获得搜狗微信中文章的浏览量和点赞量。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中,进行简单的分析处理,便可以获得我所需要的文章列表。分析思路有下:

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

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,271评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,725评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,252评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,634评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,549评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,985评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,471评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,128评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,257评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,233评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,235评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,940评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,528评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,623评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,858评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,245评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,790评论 2 339

推荐阅读更多精彩内容