博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python-爬取中药信息
阅读量:6542 次
发布时间:2019-06-24

本文共 3890 字,大约阅读时间需要 12 分钟。


1.选一个自己感兴趣的主题或网站。(所有同学不能雷同)

源地址:http://www.18ladys.com/

 

2.用python 编写爬虫程序,从网络上爬取相关主题的数据。

3.对爬了的数据进行文本分析,生成词云。

                           图3-1  爬虫小程序的词云

 

4.对文本分析结果进行解释说明。

因为爬取的是各个中药的类别及名字,没有爬取更细节的数据,所以显示出来的多是一些中药名词

 

5.写一篇完整的博客,描述上述实现过程、遇到的问题及解决办法、数据分析思想及结论。

(1).写了两个文件,具体如下:

1).数据爬取并生成txt文件的py文件

2).利用python相关的包生成词云相关操作的py文件

(2).遇到的问题以及解决方案:

1).wordcloud包的安装配置出现很大的问题,本机系统装载了两个python版本导致装载出现很多额外的问题。

解决:在同学的帮助下安装了whl文件并删除了本机中的另一个python版本。

2).信息爬取过慢

解决:暂未解决。爬取的页面预计超过100p,所以有关方面可能需要依赖别的技术。

 

6.最后提交爬取的全部数据、爬虫及数据分析源代码。

(1).文档部分

1).用于数据爬取并生成txt文件的py文件:

 

import requestsfrom bs4 import BeautifulSoup#获取——————————————————————————————————————————def catchSoup(url):    #url='http://www.18ladys.com/post/buchong/'    res=requests.get(url)    res.encoding='utf-8'    soup=BeautifulSoup(res.text,'html.parser')    return soup#类型及其网页查找(首页查找)——————————————————————def kindSearch(soup):    herbKind=[]    for new in soup.select('li'):        if(new.text!='首页'):            perKind=[]            perKind.append(new.text)            perKind.append(new.select('a')[0].attrs['href'])            herbKind.append(perKind)    return herbKind#药名查找(传入页面)——————————————————————————————————————————————————————def nameSearch(soup):    herbName=[]    for new in soup.select('h3'):        pername=new.text.split('_')[0].rstrip('图片').lstrip('\xa0').split('的功效')[0].split('(')[0].split('功效')[0].rstrip('的')        herbName.append(pername)    return herbName#分页及详细地址——————————————————————————————————————————————————————————def perPage(soup):    kindPage=[]    add=[]    for new in soup.select('.post.pagebar'):        for detail in new.select('a'):            d=[]            d.append(detail.text)            d.append(detail.attrs['href'])            kindPage.append(d)    kindPage.remove(kindPage[0])    kindPage.remove(kindPage[-1])    return kindPage#爬取某一类的所有药名:kind是一个数字,照着kindSearch的结果输入。————————————def herbDetail(kind):    soup=catchSoup('http://www.18ladys.com/post/buchong/')#从首页开始    kindName=kindSearch(soup)[kind][0]       #这一类草药的类名    adds=kindSearch(soup)[kind][1]           #这一类草药的第一页地址    totalRecord = []                         #这一类草药的所有名字    print("正在爬取 "+str(kind)+'.'+kindName)    totalRecord.append(nameSearch(catchSoup(adds)))#第一页的草药    for add in perPage(catchSoup(adds)):           #第二页以及之后的草药        pageAdd=add[1]        totalRecord.append(nameSearch(catchSoup(pageAdd)))        #print(nameSearch(catchSoup(pageAdd)))    print(totalRecord)    return totalRecord#===========================================================#                      操作#===========================================================if __name__=="__main__":    #获取类别名字及其网页地址—    totalKind=kindSearch(catchSoup('http://www.18ladys.com/post/buchong/')) #首页    #获取某一类中药的各种药名    kind=0    detailContent = ''    while(kind<20):                #如果要爬取全网站请写41        index = 1                  #前面的序列号指示        totalRecord = []        totalRecord=herbDetail(kind)        if(kind==0):            detailContent+='目录:\n'            for i in totalKind:                detailContent+=str(index)+'.'+i[0]+' '                index+=1            kind+=1            continue        else:            detailContent+='\n'+str(totalKind[kind-1][0])+':\n'        for i in totalRecord:            k=0            while k

2).程序运行截图:

3).导出文档:

(2).词云生成部分

1).生成词云相关操作的py文件:

from wordcloud import WordCloudimport jiebafrom os import pathimport matplotlib.pyplot as pltcomment_text = open('D:\\herbDetail.txt','r',encoding='utf-8').read()cut_text = " ".join(jieba.cut(comment_text))d = path.dirname(__file__)cloud = WordCloud(    font_path="C:\\Windows\\Fonts\\simhei.ttf",    background_color='white',    max_words=2000,    max_font_size=40)word_cloud = cloud.generate(cut_text)word_cloud.to_file("cloud4herb.jpg")#显示词云图片===================================plt.imshow(word_cloud)plt.axis('off')plt.show()

2).生成的词云图片:

    见上文 3.

 

 

转载于:https://www.cnblogs.com/CatalpaOvata132/p/8932846.html

你可能感兴趣的文章
一起谈.NET技术,C# 委托,事件和Lambda表达式
查看>>
远离云计算风险三步走
查看>>
Silverlight 游戏开发小技巧:技能冷却效果2(Cool“.NET研究”down)2
查看>>
Mysql的优化一则
查看>>
An Introduction to Asynchronous Programming and Twisted (2)
查看>>
vue 组件编码规范
查看>>
IEC61850与MMS的服务映射
查看>>
我的友情链接
查看>>
Java 泛型: 什么是PECS(Producer Extends, Consumer Super)
查看>>
软件包管理-打包解包压缩解压
查看>>
maven构建scala项目
查看>>
linux 高级编程看的书
查看>>
Memcached分布式缓存-windows上初步使用-网摘
查看>>
IIS无法启动的问题
查看>>
如何通过结构中的某个变量获取结构本身的指针?(container_of详解)
查看>>
Android 关于mnt/sdcard和sdcard的区别
查看>>
特征变换(7)总结
查看>>
网络工程师之路怎么走?
查看>>
go语言unix域套接字发送udp报文
查看>>
2.并发和并行
查看>>