python爬虫案例系列教程——根据网址爬取中文网站,获取标题、子连接、子连接数目、连接描述、中文分词列表
来源:互联网 发布:matlab 数组写入txt 编辑:程序博客网 时间:2024/06/14 12:54
全栈工程师开发手册 (作者:栾鹏)
python教程全解
其中使用到了urllib、BeautifulSoup爬虫和结巴中文分词的相关知识。
调试环境python3.6
# 根据连接爬取中文网站,获取标题、子连接、子连接数目、连接描述、中文分词列表,import urllibfrom bs4 import BeautifulSoupimport bs4import jieba #对中文进行分词# 分词时忽略下列词ignorewords=[',','。','?','“','”','!',';',':','\n','、','-',',','.','?','\r\n','_',' ']# 定义爬虫类。获取链接的题目、描述、分词、深度class crawler: def __init__(self,url): self.url = url self.urls={} self.urls[url]={ 'num':1, #连接被引用的次数 'title':'', #连接的标题 'text':'', #连接的描述 'allword':[], #连接的所有分词列表 } def getword(self,soup): # 获取每个单词 text=self.gettextonly(soup) #提取所有显示出来的文本 words=self.separatewords(text) #使用分词器进行分词 allword=[] for word in words: if word not in ignorewords: allword.append(word) # print(allword) return allword # 根据一个网页源代码提取文字(不带标签的)。由外至内获取文本元素。style和script内不要 def gettextonly(self,soup): v=soup.string if v==None: c=soup.contents # 直接子节点的列表,将<tag>所有儿子节点存入列表 resulttext='' for t in c: if t.name=='style' or t.name=='script': #当元素为style和script和None时不获取内容 continue subtext=self.gettextonly(t) resulttext+=subtext+'\n' return resulttext else: if isinstance(v,bs4.element.Comment): #代码中的注释不获取 return '' return v.strip() # 利用正则表达式提取单词(不能区分中文)。会将任何非字母非数字字符看做分隔符 def separatewords(self,text): seg_list = jieba.cut(text, cut_all=False) #使用结巴进行中文分词 return seg_list # splitter=re.compile('\\W*') # return [s.lower() for s in splitter.split(text) if s!=''] #爬虫主函数 def crawl(self): try: response=urllib.request.urlopen(self.url) except: print("Could not open %s" % self.url) return try: text = str(response.read(),encoding='utf-8') soup=BeautifulSoup(text,'html.parser') title = soup.title self.urls[self.url]['title'] = title.get_text() # 将标题加入到属性中 links=soup('a') for link in links: if ('href' in dict(link.attrs)): newurl=urllib.parse.urljoin(self.url,link['href']) if newurl.find("'")!=-1: continue newurl=newurl.split('#')[0] # 去掉位置部分 if newurl[0:4]=='http': if newurl not in self.urls: linkText = self.gettextonly(link) #获取连接的描述 self.urls[newurl]={ 'num':1, #连接被引用的次数 'text':linkText #链接描述 } else: self.urls[newurl]['num']+=1 #连接数+1,这里有算法只算一次 allword = self.getword(soup.body) # 获取分词 self.urls[self.url]['allword'] = allword # 将分词加入到属性中 except: print("Could not parse page %s" % self.url)if __name__ == '__main__': url='http://blog.csdn.net/luanpeng825485697/article/details/78378653' mycrawler = crawler(url) mycrawler.crawl() print(mycrawler.urls[url]['allword'])
阅读全文
0 0
- python爬虫案例系列教程——根据网址爬取中文网站,获取标题、子连接、子连接数目、连接描述、中文分词列表
- python爬虫案例系列教程——python爬取百度新闻RSS数据
- python连接Greenplum子节点
- Python连接mysql中文乱码
- python 连接 MySQL 中文乱码
- 网站开发积累(中文乱码+连接Access)
- 安装elasticsearch及中文分词器、客户端连接示例
- python应用系列教程——python中ftp操作:连接、登录、获取目录,重定向、上传下载,删除更改
- 连接子查询
- 子查询与连接
- 子查询和连接
- 20.子查询,连接
- python机器学习库教程——结巴中文分词
- .net连接MySql ,获取中文字段乱码
- python爬虫--连接数据库
- 关于python连接mysql中文乱码问题
- python连接MySQL时,中文乱码解决方案
- python连接数据库中文乱码问题分析
- 线性代数 01.02 n阶行列式的性质
- python学习—Day47—celery异步分布式(一)
- redis的安装和使用
- MBTI性格测试:你是哪种动物?准到可怕!
- 沉浸式透明状态栏的设置
- python爬虫案例系列教程——根据网址爬取中文网站,获取标题、子连接、子连接数目、连接描述、中文分词列表
- Keepalived
- JAVA中的反射机制
- magento1.x b2b 卖家面板添加自定义选项
- 分布函数总结
- Python高级编程技巧
- python flask http 接口开发
- JavaWeb学习笔记-Hibernate-01-概述
- 文件:小练习