美文网首页
制作公众号内容词云图

制作公众号内容词云图

作者: 明白1 | 来源:发表于2018-09-20 21:37 被阅读137次

    上一篇文章介绍了如何制作公众号标题的词云图。

    这篇文章介绍制作公众号文章词云图

    同样的,制作公众号文章词云图,也要先抓取公众号全部文章的内容。

    但是 webscraper 无法一次性抓取到每篇文章的内容。

    因为公众号网页版的文章链接,用的不是 html 里的 a 标签,而是在 h4 里面自定义了一个 hrefs 属性,它的属性值是真实的文章链接,需要用 Element attribute 选择器。

    而 webscraper 不支持 Element attribute 创建子选择器,也就是我们无法在抓取文章链接的同时,跳转到文章内容页抓取内容。

    所以,我们抓文章内容的时候,需要先抓取每篇文章的链接,然后把每篇文章的链接当做 start url 来抓取各自的内容。

    webscraper 支持同一个 Sitemap 有多个start url,所以我们可以把抓取到所有文章链接,一次放到start url这个位置,如下图所示。

    这种虽然可行,但如果文章数量比较大,几百篇的话,手动做这个动作,人可能会崩溃。

    咋办呢?

    大家记得之前几篇文章里,大家抓取的时候,我有让大家复制一段代码,如下:

    {
        "_id": "gzh-href",
        "startUrl": [
            "https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=MzIxODUxMDM5MQ==&scene=124&#wechat_redirect"
        ],
        "selectors": [
            {
                "id": "total",
                "type": "SelectorElementScroll",
                "parentSelectors": [
                    "_root"
                ],
                "selector": "div.weui_msg_card:nth-of-type(n+2)",
                "multiple": true,
                "delay": "1000"
            },
            {
                "id": "link",
                "type": "SelectorElementAttribute",
                "parentSelectors": [
                    "total"
                ],
                "selector": "h4.weui_media_title",
                "multiple": false,
                "extractAttribute": "hrefs",
                "delay": 0
            }
        ]
    }
    

    大家可以仔细看一下,里面有个start url 的参数,后面用中括号包围的,里面用双引号包围着一个 url 指,于是我猜,如果放多个 start url 的话,是不是用双引号包裹起来就行。

    试了下,是对的。

    那就好办了,复制链接到这个文件里面,比起复制到 webscraper 的界面里要轻松。

    有没有更简洁的方法呢?

    卧槽,我都差点忘了,我是个程序员了。

    这种拼接字符串的活,python 最拿手了。

    说干就干。虽然我好久没写代码了,写这个程序的时候,语法都是现查的,还好有些规则有印象,比如 for 循环,终端一提示这里有语法错误,我就能想起来要加冒号。

    还有字符串的切片,我知道有某个函数功能,但是忘了怎么用,搜索一下找到例子,改改就OK了。

    反正这样试了改,改了试,还是写出了了。

    源代码放出来,(技术大佬别骂我):

    #!/usr/bin/python
    # coding = utf-8
    import os
    
    f1 = open('start_url.txt','r')
    f2 = open('sitemap.txt','r')
    
    
    lines = f1.readlines()
    lines2 = f2.readlines()
    
    
    for line in lines:
        start_url = ',' + '''"''' + line.strip() +'''"'''
        lines2.insert(4, start_url)
    
    f3 = open('new_sitemap.txt','w')
    f3.writelines(lines2)
    
    f1.close()
    f2.close()
    f3.close()
    
    print("finished!")
    

    下面是如何使用这个代码,我已经找好了一个在线 python 编译器

    1、用 webscraper 抓取所有文章的链接,需要用到的Sitemap 如下——

    {
        "_id": "gzh-href",
        "startUrl": [
            "https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=MzIxODUxMDM5MQ==&scene=124&#wechat_redirect"
        ],
        "selectors": [
            {
                "id": "total",
                "type": "SelectorElementScroll",
                "parentSelectors": [
                    "_root"
                ],
                "selector": "div.weui_msg_card:nth-of-type(n+2)",
                "multiple": true,
                "delay": "1000"
            },
            {
                "id": "link",
                "type": "SelectorElementAttribute",
                "parentSelectors": [
                    "total"
                ],
                "selector": "h4.weui_media_title",
                "multiple": false,
                "extractAttribute": "hrefs",
                "delay": 0
            }
        ]
    }
    

    抓取完成后,把第一列、第二列删掉,把第一行表头删掉。

    2、进入这个网站:https://repl.it/repls/UnimportantEdibleClimate

    3、点击左侧 start_url.txt,然后在右边(标2处)填上第一步处理过的所有文章链接。
    如下图

    4、点击“run”,如下图


    等待几秒钟,右面黑框处会出现一个finished!如下图


    image.png

    5、点击左侧 new_Sitemap.txt,这个文件里面就是抓取所有文章内容的 Sitemap,然后复制,导入到 webscraper就可以了。

    image.png

    剩下就和生成标题词云图的步骤一模一样了。

    这里不在赘述。


    我写作的一个网站,很好玩:http://www.zsxq100.com/

    相关文章

      网友评论

          本文标题:制作公众号内容词云图

          本文链接:https://www.haomeiwen.com/subject/lnznnftx.html