怎么爬取西南科技大学新闻网前20页的网页信息

怎么爬取西南科技大学新闻网前20页的网页信息,第1张

爬取思路与世仔方法步骤如下:

第一步,用requests获取新闻目录的网页源码。

第二步,获取每一篇文章的url,并先提取日期、标题。

第三步,通过日期限制爬取范围,并对每一察返耐则新闻的url发起get请求。

第四步,在每则新闻网页的源代码中获取剩下的信息,即作者、正文、浏览数。

第五步,存败春入数据库。

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

所谓网页抓取,就是把URL地址中指定的网络资源从芦滚网络流中读取出来,保存到本地。 类似于使用程序模拟IE浏览器的功能,把URL作为HTTP请求的内容发送到服务器陪唤余端, 然后读链启取服务器端的响应资源。 在Python中,我们使用urllib2这个组件来抓取网页。u...


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12429486.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存