抓取网页新闻(学弟爬门户网站新闻的程序需求及安装方法可以参考! )

优采云 发布时间: 2021-11-30 16:04

  抓取网页新闻(学弟爬门户网站新闻的程序需求及安装方法可以参考!

)

  我是另一个自然语言处理项目。我需要在网上爬取一些文章,然后进行分词。正好牛客这周从一个html里找了一段文字,练习了一下。写了一个程序来爬取门户网站news

  要求:

  从门户网站抓取新闻网站,并将新闻标题、作者、时间、内容保存到本地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 install 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

  统计文章被抓取的次数。

  

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线