首页 > 编程语言 > 详细

【Python网络爬虫三】 爬去网页新闻

时间:2017-01-08 20:15:47      阅读:210      评论:0      收藏:0      [点我收藏+]

学弟又一个自然语言处理的项目,需要在网上爬一些文章,然后进行分词,刚好牛客这周的是从一个html中找到正文,就实践了一下。写了一个爬门户网站新闻的程序

 

需求:

从门户网站爬取新闻,将新闻标题,作者,时间,内容保存到本地txt中。

 

用到的python模块:

1 import re  # 正则表达式
2 import bs4  # Beautiful Soup 4 解析模块
3 import urllib2  # 网络访问模块
4 import News   #自己定义的新闻结构
5 import codecs  #解决编码问题的关键 ,使用codecs.open打开文件
6 import sys   #1解决不同页面编码问题

其中bs4需要自己装一下,安装方法可以参考:Windows命令行下pip安装python whl包

 

程序:

 1 #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()

新闻文章结构

 1 #coding: utf-8
 2 # 文章类定义
 3 class News(object):
 4     def __init__(self):
 5         self.url = None
 6         self.title = None
 7         self.author = None
 8         self.date = None
 9         self.about = None
10         self.content = None

 

对爬取的文章数量就行统计。

技术分享

技术分享

 

【Python网络爬虫三】 爬去网页新闻

原文:http://www.cnblogs.com/SeekHit/p/6262534.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!