本文收录于 《python学习笔记》专栏,这个专栏主要是我学习Python中遇到的问题,学习的新知识,或总结的一些知识点,我也是初学者,可能遇到的问题和大部分新人差不多,在这篇专栏里,我尽可能的分享出我学习的内容,专栏在持续更新中……

hello😁,大家好,最近新学习了xpath在网站上爬取静态文字,就想着做一个东西,恰好前几天翻看博客是看到了wordcloud(词云)⛅这个库,就有一个想法涌入我的脑中,爬取2022年比较火的几个梗生成词云。

但是受技术的限制好多想法实现不了,比如想让词云上某个梗的大小由某个梗的热度决定……


步骤👉

网页原码获取💪

这是我本次用到的文件,要把它们放到一个文件夹下(图一)

图一

xpath的知识我就不展开叙述了,不会的可以先去进修一下,不懂HTML的朋友也没事。

找到你想爬取的网页,按F12,点红框框的按钮,然后点击你想爬取的文本内容,网页源码就会跳到相应的位置(图二)

图二

找到你想爬取的某行,右击,复制Xpath(图三)

图三

xpath💪

这四行代码就是本程序的核心

from lxml import etree
html = """
要爬取的网页原码"""
parse_html = etree.HTML(html)
#                           这里放上复制的xpath路径就行                 text()意思是要文本内容
index = parse_html.xpath("/html/body/li/div/div[1]/div[2]/div/div[2]/a/i[1]/text()" )
列表导TXT💪

这四行的作用是把爬取的内容保存到txt中,这个过程需要解码,不然就像图四那样爬到TXT中成了乱码。

with open('wordcloud.txt', 'w', encoding='utf-8') as f:
    # 把列表转换成字符串
    Ls = " ".join('%s' % d for d in ls)
    # 对文本进行转码和解码,不然到txt中就会成乱码
    content = Ls.encode("utf-8").decode("unicode_escape")
    f.write(Ls)

图四

全部代码👉

import jieba
from wordcloud import WordCloud
from lxml import etree

html = """
要爬取的网页原码"""
parse_html = etree.HTML(html)
# 用列表存储的到的文本内容
ls = []
# 用遍历得到多个内容
i = 1
while i <= 10:
    index = parse_html.xpath("/html/body/li/div/div[%d]/div[2]/div/div[2]/a/i[1]/text()" % i)
    ls.append(index)
    i += 1
# print(ls)
# 将得到的内容转变成字符串并保存到TXT文本文档中
with open('wordcloud.txt', 'w', encoding='utf-8') as f:
    Ls = " ".join('%s' % d for d in ls)
    content = Ls.encode("utf-8").decode("unicode_escape")
    # print(content)
    f.write(Ls)

# 词云这个是借鉴的,链接在文末
def trans_ch(txt):
    words = jieba.lcut(txt)
    newtxt = ''.join(words)
    return newtxt

f = open('wordcloud.txt', 'r', encoding='utf-8')
txt = f.read()
f.close()
txt = trans_ch(txt)
wordcloud = WordCloud(background_color="white",
                      # 画布长宽
                      width=500,
                      height=500,
                      # 文字的最大数量
                      max_words=100,
                      文字大小的最大和最小
                      max_font_size=120,
                      min_font_size=20,
                      contour_width=100,
                      # 字体
                      font_path="STCAIYUN.TTF"
                      ).generate(txt)
wordcloud.to_file('词云图.png')

可能就有朋友要问了,这么几个字还要用这么多代码爬取,直接复制不得了吗,现在爬取的内容少,只是为了练习,当真正需要爬取大量数据的时候,相比直接复制效率可不止快了一两倍。

这是今年的最后一篇文章,借这篇文章为明年立下一个plan:

今年学习Python,HTML,css,了解了sql和C语言,今年第一次接触编程,未来会继续学习编程,明年计划保底30篇博客,要质量不要数量。

本文词云制作借鉴文章: python词云制作(最全最详细的教程)

喜欢的话留下你的赞,给予我最好的反馈

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐