一个完整的大作业
1.选一个自己感兴趣的主题。
2.网络上爬取相关的数据。
3.进行文本分析,生成词云。
4.对文本分析结果解释说明。
5.写一篇完整的博客,附上源代码、数据爬取及分析结果,形成一个可展示的成果。
#coding=utf-8 2 import re # 正则表达式 3 import bs4 # Beautiful Soup 4 解析模块 4 import urllib2 # 网络访问模块 5 import News #自己定义的新闻结构 6 import codecs #解决编码问题的关键 ,使用codecs.open打开文件 7 import sys #1解决不同页面编码问题 8 9 reload(sys) # 2 10 sys.setdefaultencoding('utf-8') # 3 11 12 # 从首页获取所有链接 13 def GetAllUrl(home): 14 html = urllib2.urlopen(home).read().decode('utf8') 15 soup = bs4.BeautifulSoup(html, 'html.parser') 16 pattern = 'http://\w+\.baijia\.baidu\.com/article/\w+' 17 links = soup.find_all('a', href=re.compile(pattern)) 18 for link in links: 19 url_set.add(link['href']) 20 21 def GetNews(url): 22 global NewsCount,MaxNewsCount #全局记录新闻数量 23 while len(url_set) != 0: 24 try: 25 # 获取链接 26 url = url_set.pop() 27 url_old.add(url) 28 29 # 获取代码 30 html = urllib2.urlopen(url).read().decode('utf8') 31 32 # 解析 33 soup = bs4.BeautifulSoup(html, 'html.parser') 34 pattern = 'http://\w+\.baijia\.baidu\.com/article/\w+' # 链接匹配规则 35 links = soup.find_all('a', href=re.compile(pattern)) 36 37 # 获取URL 38 for link in links: 39 if link['href'] not in url_old: 40 url_set.add(link['href']) 41 42 # 获取信息 43 article = News.News() 44 article.url = url # URL信息 45 page = soup.find('div', {'id': 'page'}) 46 article.title = page.find('h1').get_text() # 标题信息 47 info = page.find('div', {'class': 'article-info'}) 48 article.author = info.find('a', {'class': 'name'}).get_text() # 作者信息 49 article.date = info.find('span', {'class': 'time'}).get_text() # 日期信息 50 article.about = page.find('blockquote').get_text() 51 pnode = page.find('div', {'class': 'article-detail'}).find_all('p') 52 article.content = '' 53 for node in pnode: # 获取文章段落 54 article.content += node.get_text() + '\n' # 追加段落信息 55 56 SaveNews(article) 57 58 print NewsCount 59 break 60 except Exception as e: 61 print(e) 62 continue 63 else: 64 print(article.title) 65 NewsCount+=1 66 finally: 67 # 判断数据是否收集完成 68 if NewsCount == MaxNewsCount: 69 break 70 71 def SaveNews(Object): 72 file.write("【"+Object.title+"】"+"\t") 73 file.write(Object.author+"\t"+Object.date+"\n") 74 file.write(Object.content+"\n"+"\n") 75 76 url_set = set() # url集合 77 url_old = set() # 爬过的url集合 78 79 NewsCount = 0 80 MaxNewsCount=3 81 82 home = 'http://baijia.baidu.com/' # 起始位置 83 84 GetAllUrl(home) 85 86 file=codecs.open("D:\\test.txt","a+") #文件操作 87 88 for url in url_set: 89 GetNews(url) 90 # 判断数据是否收集完成 91 if NewsCount == MaxNewsCount: 92 break 93 94 file.close()