入门初级python爬虫及图形化展示实训小项目

本文件将给入门同学们,提供一个简单的爬虫框架,如果有大佬指点可以积极的在下方评论。

1.首先,我们要知道一些基础的爬虫知识,和爬虫的基本原理。

2.至于图形化展示,本次将使用最简单的wordcloud库的方法进行词云形式的图形化展示。

3.在进行正文之前我们应该查看本地pip中是否有一下几个库。(1)requests 库 (2)re库(3)jieba库

       (4)wordcloud库(5)PIL库(6)numpy库

如果cmd 中pip list 中没有 一上几个库,那么大家可以搜索下载的方法。

在cmd中输入pip list指令就可以查看了。    

  嘻嘻,涂鸦部分是用户名。

好了好了, 我们进入正题:

import requests
import re
import jieba
import wordcloud
from PIL import Image
import numpy as np

def pacong():
    print("开启爬虫咯!")
    r = requests.get("https://www.xyyuedu.com/zhuzibaijia/hanfeizi/33840.html")
    #括号里是我们想要爬取的网站。

    print(r.status_code)
    #返回爬取的状态如果打印200那么就算是访问成功了

    r.encoding = 'utf-8'
    #将爬取的信息进行编码,utf-8是可以显示中午的编码。

    html = r.content.decode("gbk")
    #这个是读取网站时的编码,这里不了解也可以,用的时候直接用就行
    
    text = re.findall('<div id="arcxsbd">.*?<div id="onearcxsbd" class="onearcxsbd">            ([\S\s]+)<div class="list-pages page-center ">',html,re.S)

    #这里是一个难点,涉及正则表达式。(“ .*? ”)这个的意思是搜索到第一个符和的这个条件的内容就        
    #进行读取,且不反复搜索。
    #[\s\S] 意思是匹配所有 空白字符+非空白字符 , 说白了也就是全部字符都可以。
    #使用re.S参数以后,正则表达式会将这个字符串作为一个整体,在整体中进行匹配
    #本次次爬取的网站格式比较友好,id class比较容易找到,类似的网站可以直接套用这个格式直接    
    #整,如果想了解更多的同学们可以学习web的一些知识。
        

    text1 =text[0].replace("&ldquo;","")
    text1 =text1.replace("<br />","")
    text1 =text1.replace("&rdquo;",":")
    #上面这些代码的意识就是对爬出文章的一些不用的内容进行替换,爬出的信息是一个列表,经过此处理 
    转换成了字符串类型 这里可以先观察爬出的内容进行替换,括号里面前一个引号内是想要替换的内容,    
    后者是替换成的内容。

    fd = open("*********","r+") #打开本地创建好的文本并使用(r+)读写模式,使用w+也可以只是有        
                                一些小区别。型号就是填写本地的路径,用双斜杠分割。
    fd.write(text1)
    #这里就是将上面的text1写进fd这个文本里.
    print("爬虫成功")


def Texthandle(x):
    print("以对您所选的文章进行jieba处理:")
    if x == 1:
        pacong()
        fd = open("**************").read()  #这个是爬虫爬出的信息的保存路径
        words = jieba.lcut(fd)
        txt1= " ".join(words)
        print("jieba处理成功")
    elif x== 2:
        dizhi = "****************"          #这个是本地的信息的保存路径
        word = open (dizhi, encoding='utf-8').read()
        words = jieba.lcut(word)
        txt1 = " ".join(words)
        print("jieba处理成功")
    return txt1

#星号同上都是本地路径,后面我也不再提醒了,本函数是进行文本的jieba处理,判断1,2的原因是在后面可以知道,是对用户不同需求进行处理,本函数由于小编偷懒了,同学们写的时候可以加些input()函数获取路径,将本函数更加的灵活些。记得处理中文文本时一定用用utf-8编码,文本的编码也是。一定一定!!!!
一些jieba的道理我就不多讲了,大家应该知道。




def Wordcloud(x):
    if x ==1 or x==2:
        print("启动词云处理程序!")

        color = input("请输入您想设置的颜色:")
        BackGround = Image.open("************") 
#这个是背景图片的路径,也可以用input函数将此函数更加灵活
        mask=np.array(BackGround)
        w = wordcloud.WordCloud(font_path="msyh.ttc",#设置背景参数
                           max_words=200,\
                           max_font_size=80,\
                           background_color= color,mask=mask)
        w.generate(Texthandle(x))
        NameSet =input("请输入您想保存的文件名:(请用.png结尾)")  
        w.to_file("*:\\*****\\{}".format(NameSet))  
#这里词云的保存路径我设置时直接写成保存    到那个文件夹里,同学们也可以根据需求进行适当的调整。
        print("文件保存成功,程序结束!")
    else:
        print("请输入1或2")
        open1()


 #本函数是词云处理函数,涉及一些wordcloud库的一些函数的用法,这些函数如果不知道咋用的同学请自行学习,比较简单。我就强调两点:
(1)就是对与“font_path="msyh.ttc"”这个是在中文词云中必须使用这个是设置字体的,否则词云将全是方块,同学们可以自己试一下就懂了,还有很多字体,这个是比较常用的。
(2)就是设置背景图片时,最好使用jpg格式的图片,其他的我试了好多,都是无法读取,所以我建议使用jpg格式的图片,也不可是其他格式通过更改格式名直接改为jpg格式的,这样也是会报错的。

def open1():
    print("1:网络爬虫获取小说") 
    print("2:对已有小说进行分析")
    n = eval(input("请输入你想选的序号:"))
    Wordcloud(n)
    #本函数就是菜单函数,结构十分简单,只要懂得eval函数的作用就行了。获取用户信息并调用函数。
open1()

 

总结:

这个工程较为简单,适合初学者了解,我也希望学习了的同学们可以养成一个多定义写函数来解决文体,这样可以减少代码的复用。还有就是同学们可以多用一些 if 判断语句和input()输入函数还有for循环等将代码变得更灵活。可以在每一步函数执行后,使用一些print()函数为用户输出程序运行状态,这样也可以帮助我们在写代码时更容易检查,让别人感觉更有条理。

词云展示:

本文章是小编的处女作,有什么建议可以直接评论在下方,大家可以互相学习学习,我本身也是一个编程小白,希望通过这个平台与大家学习编程知识。

 

 

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值