正则匹配牛刀小试——一键抓取奇虎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)

 

就这样,请多多指教!

posted @ 2014-03-30 16:31  中大黑熊  阅读(1077)  评论(0编辑  收藏  举报