• Python实战项目网络爬虫 之 爬取小说吧小说正文


    本次实战项目适合,有一定Python语法知识的小白学员。本人也是根据一些网上的资料,自己摸索编写的内容。有不明白的童鞋,欢迎提问。

    目的:爬取百度小说吧中的原创小说《猎奇师》部分小说内容

    链接:http://tieba.baidu.com/p/4792877734

    首先,自己定义一个类,方便使用。其实类就像一个“水果篮”,这个“水果篮”里有很多的“水果”,也就是我们类里面定义的变量啊,函数啊等等,各种各样的。每一种"水果"都有自己的独特的口味,也即是各个函数实现的功能各不相同。

    然后,按照这个思路,既然要爬取小说,那么肯定要有目标网页的地址,也就是上面我给的那个连接。其实就像买水果之前,我们要找到水果店。

    打开目标贴吧后,会发现里面有很多的贴子,有楼主发的,还有读者评论的,很多很杂。不过,没关系。度娘给了我们一个强大的功能,只看楼主。这就是我们的切入点。点击只看楼主按钮,哈哈,此时呈现在眼前的就是楼主的主要内容啦。

    相应的,此时的网页也有所改变,地址上多了一个只看楼主的标记 http://tieba.baidu.com/p/4792877734?see_lz=1

    所以,我们在定义类中的初始化函数时,就要有这个标记。

    接下来,我们开始在选择不同口味的水果。我们要先获取网页的源代码,就需要有一个getPage的函数。函数里需要有我们的页码,注意我们选择不同也的小说,会发现,我们的地址也是有稍稍变动的,比如:第二页连接:http://tieba.baidu.com/p/4792877734?see_lz=1&pn=2     多了&pn=2。这个我们要整合一下。

    (未完>>>>>>>>>明晚继续)

    下面是我的代码:

     1 #-*- coding:utf-8 -*-
     2 import urllib
     3 import urllib2
     4 import re
     5 
     6 # 百度小说吧  原创小说《猎奇师》
     7 # 连接http://tieba.baidu.com/p/4792877734?see_lz=1
     8 # 第二页连接:http://tieba.baidu.com/p/4792877734?see_lz=1&pn=2
     9 class LQS:
    10     def __init__(self,daseUrl,seeLZ):
    11         self.daseUrl = daseUrl
    12         self.seeLZ ='?see_lz=' + str(seeLZ)
    13     # 传入页码,获取网页源代码
    14     def getPage(self,pageNum):
    15         try:
    16             # 拼接,地址 + 楼主参数 + 页数
    17             url = self.daseUrl + self.seeLZ + '&pn=' + str(pageNum)
    18             request = urllib2.Request(url)
    19             response = urllib2.urlopen(request)
    20             return response.read()
    21         except Exception,e:# 处理异常
    22             print e
    23     # 获取标题
    24     def getTitle(self,pageNum):
    25         html = self.getPage(pageNum)
    26         reg = re.compile(r'<title>【原创】恐怖故事 (.*?)_小说吧_百度贴吧</title>')
    27         items = re.findall(reg,html)
    28         # 将标题写入文件
    29         for item in items:
    30             f = open('lqshi.txt','w') # 文件名最好是英文,中文识别不了
    31             f.write('标题' + '		' + item)
    32             f.close()
    33         return items
    34     # 获取正文
    35     def getContent(self,pageNum):
    36         html = self.getPage(pageNum)
    37         reg = re.compile(r'class="d_post_content j_d_post_content ">          (.*?)</div><br>')
    38         req = re.findall(reg,html)
    39         # 将标题写入文件
    40         for i in req:
    41             removeAddr = re.compile('<a.*?</a>')
    42             i = re.sub(removeAddr,"",i)# 找到并替换
    43             i = i.replace("<br>","
      ")
    44             f = open('lqshi.txt','a')# 此处是写入正文内容,所以用a
    45             f.write( '
    
    
    ' + i)
    46             f.close()
    47         return i
    48 
    49 daseURL = 'http://tieba.baidu.com/p/4792877734'
    50 lqShi = LQS(daseURL,1)
    51 print "爬虫已启动..."
    52 for i in range(4):
    53     lqShi.getTitle(i)
    54     lqShi.getContent(i)
    55     print "正在抓取第%s页的内容" % (i+1)
  • 相关阅读:
    Why Are Some OSPF Routes in the Database but Not in the Routing Table?
    (OK) 手动 添加 删除 bridge tap — tunctl — brctl
    (OK) kvm虚拟机克隆—KVM本机虚拟机直接克隆—通过复制xml文件与磁盘文件复制克隆
    KVM虚拟化管理
    (OK) init_install_android-x86_64_in_QEMU-KVM.sh
    (OK) init_in_android-x86_64.sh
    (OK)(OK) using adb with KVM (qemu)
    (OK)(OK) QEMU-KVM —— HOST AND GUEST can ping each other
    Example Sharing Host files with the Guest — 9p — qemu-kvm
    (OK) 图解几个与Linux网络虚拟化相关的虚拟网卡-VETH/MACVLAN/MACVTAP/IPVLAN
  • 原文地址:https://www.cnblogs.com/Bro-Young/p/5962250.html
Copyright © 2020-2023  润新知