正则匹配牛刀小试——一键抓取奇虎360新闻信息

继续爬虫的学习,为了致敬

http://blog.csdn.net/pleasecallmewhy/article/details/8932310  中why大神的糗事爬虫,我做了一个奇虎新闻的小爬虫,亲测可试,但是我这个爬虫还是单线程的,而且抓取的量也不是很多,而且是最基本的url特性抓取,还没有能力抓取url不变的网站消息。

首先说一下我要抓取的网站:360新闻搜索 - 搜一下,知天下 ,通过观察其url,不难看出来是

http://sh.qihoo.com/类别/index_页数.html 的结构,隐藏只需要把它抓取回来,依次用正则的方式匹配就行,废话不多说,上码。

 1 #!/usr/bin/env python

 2 #-*-coding:utf-8-*-

 3 

 4 #---------------------------------------  

 5 #   程序:奇虎360新闻爬虫

 6 #   文件名:Qihoo360.py

 7 #   作者:sysublackbear

 8 #   日期:2014-03-30  

 9 #   语言:Python

10 #   功能:将360中的新闻,链接及摘要输出并且保存到本地文件    

11 #---------------------------------------  

12 

13 import urllib2

14 import urllib

15 import re

16 import string

17 

18 #定义新闻的标签

19 tags = ['china','world','mil','ent','sports',\

20         'internet','tech','finance','house','auto','edu','game',\

21         'lady','health','society'] 

22 

23 class Qihoo360News:

24     #构造函数

25     def __init__(self):

26         self.start = 1   #默认开始从第一页开始

27         self.end = 5 #默认结束页还是1

28 

29     #把某一页的标题和连接都放到字典上

30     def getPage(self,tag,start,end):

31         if tag not in tags:

32             print '你所找的类别不存在!'

33             return 

34         if end > 5:

35             end = 5

36         url = "http://sh.qihoo.com/"+tag+"/"

37         intro = '以下是'+tag+'抓取的结果'

38         print intro

39         for i in range(start,end+1):

40             f = open('/home/dzhwen/python文件/Homework/urllib/qihoo/qihoo_'+tag+'_page_'+str(i)+'.txt','w+')

41             id = ''+str(i)+''

42             print id.center(40)

43             f.write(id.center(40)+'\n')

44             if i == 1:

45                 myurl = url + "index.html"

46             else:

47                 myurl = url + "index_" + str(i) + ".html"

48             Response = urllib2.urlopen(myurl)

49             Page = Response.read()

50             myItems = re.findall('<div class="hd">.*?<h2><a href="(.*?)" target="_blank">(.*?)</a></h2>.*?<div class="bd">.*?<p>(.*?)<a',Page,re.S)

51             #其中,re.S为多行匹配模式

52             #输出同时写入文本

53             temp = '*******************************************'

54             for item in myItems:

55                 print temp

56                 f.write(temp + '\n')

57                 print '标题:',item[1]

58                 f.write('标题:'+item[1]+'\n')

59                 print 'From:',item[0]

60                 f.write('From:'+item[0]+'\n')

61                 print '摘要:',item[2]

62                 f.write('摘要:'+item[2]+'\n')

63                 print temp

64             f.close()

65 

66 

67 if __name__ == '__main__':

68     qihoo = Qihoo360News()

69     menu="""

70     请选择要抓取的类别:

71     1——国内;2——国际;3——军事;4——娱乐;5——体育;6——互联网;7——科技;8——财经;

72     9——房产;10——汽车;11——教育;12——游戏;13——女性;14——健康;15——社会;

73     或者:?(慎用!!)

74     一键全抓取??(A)

75     """

76     print menu

77     tag = raw_input("请选择:")

78     if tag != 'A':

79         start = raw_input("请选择开始页数(1——5):")

80         end = raw_input("请选择结束页数(1——5):")

81         qihoo.getPage(tags[int(tag)-1],int(start),int(end))

82     else:

83         for item in tags:

84             qihoo.getPage(item,1,5)

 

就这样,请多多指教!

你可能感兴趣的:(360)