• 正则匹配牛刀小试——一键抓取奇虎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)+'
    ')
    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 + '
    ')
    57                 print '标题:',item[1]
    58                 f.write('标题:'+item[1]+'
    ')
    59                 print 'From:',item[0]
    60                 f.write('From:'+item[0]+'
    ')
    61                 print '摘要:',item[2]
    62                 f.write('摘要:'+item[2]+'
    ')
    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)

    就这样,请多多指教!

  • 相关阅读:
    138.安全退出的异常,要用throw 尽量不用exit(0)
    137.CPP自带异常
    136.异常的多态,父类对象,传递子类的引用或指针(地址)
    135.异常与类继承
    134.异常类的处理
    133.throw机制 抛出类类型
    132.try throw catch介绍
    CF1039D You Are Given a Tree
    CF576E Painting Edges
    【模板】并查集维护生成树
  • 原文地址:https://www.cnblogs.com/sysu-blackbear/p/3634155.html
Copyright © 2020-2023  润新知