zoukankan      html  css  js  c++  java
  • 转 Python爬虫实战二之爬取百度贴吧帖子

    静觅 » Python爬虫实战二之爬取百度贴吧帖子

    大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子。与上一篇不同的是,这次我们需要用到文件的相关操作。

    本篇目标

    1.对百度贴吧的任意帖子进行抓取

    2.指定是否只抓取楼主发帖内容

    3.将抓取到的内容分析并保存到文件

    1.URL格式的确定

    首先,我们先观察一下百度贴吧的任意一个帖子。

    比如:http://tieba.baidu.com/p/3138733512?see_lz=1&pn=1,这是一个关于NBA50大的盘点,分析一下这个地址。

    所以我们可以把URL分为两部分,一部分为基础部分,一部分为参数部分。

    例如,上面的URL我们划分基础部分是 http://tieba.baidu.com/p/3138733512,参数部分是 ?see_lz=1&pn=1

    2.页面的抓取

    熟悉了URL的格式,那就让我们用urllib2库来试着抓取页面内容吧。上一篇糗事百科我们最后改成了面向对象的编码方式,这次我们直接尝试一下,定义一个类名叫BDTB(百度贴吧),一个初始化方法,一个获取页面的方法。

    其中,有些帖子我们想指定给程序是否要只看楼主,所以我们把只看楼主的参数初始化放在类的初始化上,即init方法。另外,获取页面的方法我们需要知道一个参数就是帖子页码,所以这个参数的指定我们放在该方法中。

    综上,我们初步构建出基础代码如下:

     1 # -*- coding:utf-8 -*-
     2 import urllib
     3 import urllib2
     4 import re
     5 import sys     # 1
     6 import thread
     7 import time
     8 
     9 #百度贴吧爬虫类
    10 #http://tieba.baidu.com/p/3138733512?see_lz=1&pn=1
    11 class BDTB(object):
    12     """docstring for QSBK"""
    13     #初始化,传入基地址,是否只看楼主的参数
    14     def __init__(self,baseURL,seeLZ):
    15         self.baseURL = baseURL
    16         self.seeLZ = '?see_lz='+str(seeLZ)
    17 
    18     #传入页码,获取该页帖子的代码
    19     def getPage(self,pageNum):
    20         try:
    21             url = self.baseURL + self.seeLZ + '&pn=' + str(pageNum)
    22             request = urllib2.Request(url)
    23             response = urllib2.urlopen(request)
    24             #pageCode = response.read().decode('utf-8')
    25             print url + '
    '
    26             print response.read()
    27             return response
    28         except urllib2.URLError, e:
    29             if hasattr(e,"code"):
    30                 print e.code
    31             if hasattr(e,"reason"):
    32                 print e.reason
    33                 return None
    34 
    35 if __name__ == '__main__':
    36     baseURL = 'http://tieba.baidu.com/p/3138733512'
    37     bdtb = BDTB(baseURL,1)
    38     bdtb.getPage(1)

    3.提取相关信息

    1)提取帖子标题

    首先,让我们提取帖子的标题。

    在浏览器中审查元素,或者按F12,查看页面源代码,我们找到标题所在的代码段,可以发现这个标题的HTML代码是

    所以我们想提取<h1>标签中的内容,同时还要指定这个class确定唯一,因为h1标签实在太多啦。

    正则表达式如下

    所以,我们增加一个获取页面标题的方法

  • 相关阅读:
    Python之路(第十七篇)logging模块
    Python之路(第十五篇)sys模块、json模块、pickle模块、shelve模块
    Python之路(第十四篇)os模块
    Python之路(第十三篇)time模块、random模块、string模块、验证码练习
    Python之路(第十二篇)程序解耦、模块介绍导入安装、包
    Python编程笔记(第三篇)【补充】三元运算、文件处理、检测文件编码、递归、斐波那契数列、名称空间、作用域、生成器
    Python之路(第十一篇)装饰器
    Python之路(第十篇)迭代器协议、for循环机制、三元运算、列表解析式、生成器
    Python之路(第九篇)Python文件操作
    Python编程笔记(第二篇)二进制、字符编码、数据类型
  • 原文地址:https://www.cnblogs.com/njczy2010/p/5563173.html
Copyright © 2011-2022 走看看