本文件将给入门同学们,提供一个简单的爬虫框架,如果有大佬指点可以积极的在下方评论。
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("“","")
text1 =text1.replace("<br />","")
text1 =text1.replace("”",":")
#上面这些代码的意识就是对爬出文章的一些不用的内容进行替换,爬出的信息是一个列表,经过此处理
转换成了字符串类型 这里可以先观察爬出的内容进行替换,括号里面前一个引号内是想要替换的内容,
后者是替换成的内容。
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()函数为用户输出程序运行状态,这样也可以帮助我们在写代码时更容易检查,让别人感觉更有条理。
词云展示:
本文章是小编的处女作,有什么建议可以直接评论在下方,大家可以互相学习学习,我本身也是一个编程小白,希望通过这个平台与大家学习编程知识。