词云: Python爬取国际时事

前置工具

python
wordcloud
jieba
BeautifulSoup
matplotlib
scipy

第一步: 爬取国际时事列表

待爬地址: http://m.sohu.com/cr/57/?page=1&v=2

首先我们可以观察到,每点击列表中的下一页时, page 会加一

然后我们就可以确认,想获取多少条信息,直接替换page属性的值即可

然后我们观察想要爬取的内容:

审查元素:

我们发现文本都是在 div(class=”bd3 pb1″) -> div -> p -> a 标签下的:

编写代码

爬取数据并保存在data.txt中:

# coding: utf-8

from wordcloud import WordCloud
import requests
from bs4 import BeautifulSoup
import re

def getHTMLText(url):
    try:
        r = requests.get(url)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        pass

def has_p_a(tag):
    pass

def getWannaData(stockURL,res):
    html = getHTMLText(stockURL)
    soup = BeautifulSoup(html,'html.parser')
    p = soup.find('div',class_="bd3 pb1").find_all('a')
    for q in p:
        res.append(q.text)

res = []
maxn = 100
for i in range(1,maxn):
    getWannaData('http://m.sohu.com/cr/57/?page='+str(i)+'&v=2',res)

file = open('data.txt','a+')
for q in res:
    file.write(q+'\n')

其中maxn是控制爬取多少页的

data.txt 部分内容:

第二步: 生成词云

前置

因为要进行中文分词,所以要用jieba
注意再打开data.txt编码问题
还有ttf不能保存在有中文的路径下

背景图片

我们选择 水伊布.png

生成词云

容我说一句,在中国相对封闭的网络环境中,已经可以看到世界如此的乱了,全部的词条大部分是消极的…看起来大规模战争结束的时间太久了…(还是说,世界就没有安宁过)

这张图可以找到安倍