Python爬虫之百度贴吧

目标:
1、对百度贴吧的任意帖子进行爬取
2、爬取帖子指定内容
3、将爬取内容保存到文件

1、分析url

这里写图片描述

https://tieba.baidu.com/p/3138733512?see_lz=1&pn=1
分析:
https:传输协议
tieba.baidu.com:百度二级域名
p/3138733512:资源定位
see_lz=1&pn=1:参数see_lz:楼主 pn=1:第一页

所以上面的url分为两个部分
基础部分: https://tieba.baidu.com/p/3138733512
参数:see_lz=1&pn=1

2、页面抓取

上代码:

# coding=utf-8
import urllib
import urllib2
import re
#百度贴吧爬虫类
class BDTB:
    #初始化,传入基地址,是否看楼主的参数
    def __init__(self, baseUrl, seeLZ):
        self.baseURL = baseUrl
        self.seeLZ = '?see_lz='+str(seeLZ)
    #传入页码,获取该页帖子的代码
    def getPage(self,pageNum):
        try:
            url = self.baseURL+self.seeLZ+'&pn'+str(pageNum)
            request = urllib2.Request(url)
            response = urllib2.urlopen(request)
            result =  response.read()
            print(result)
            return result
        except urllib2.URLError,e:
            if hasattr(e,"reason"):
                print u"连接百度贴吧失败,错误原因",e.reason
                return None

baseURL = 'http://tieba.baidu.com/p/3138733512'
bdtb = BDTB(baseURL,1)
bdtb.getPage(1)


print(result)这句是输出源代码
运行程序:
这里写图片描述

3、 提取相关信息

提取贴吧标题
谷歌浏览器按F12,查找标题的html代码
这里写图片描述

<h3 class="core_title_txt pull-left text-overflow  " title="纯原创我心中的NBA2014-2015赛季现役50大" style="width: 396px">纯原创我心中的NBA2014-2015赛季现役50大</h3>

所以我们想提取 h1标签中的内容,同时还要指定这个class确定唯一,因为h1标签实在太多啦。
正则表达式如下:

<h3 class="core_title_txt.*?>(.*?)</h3>

获取标题代码

 #获取帖子标题
    def getTitle(self):
        page = self.getPage(1)
        pattern = re.compile('<h3 class="core_title_txt.*?>(.*?)</h3>',re.S)
        result = re.search(pattern,str(page))
        if result:
            print result.group(1)  # 测试输出
            return result.group(1).strip()
        else:
            return None

完整代码:

# coding=utf-8
import urllib
import urllib2
import re
#百度贴吧爬虫类
class BDTB:
    #初始化,传入基地址,是否看楼主的参数
    def __init__(self, baseUrl, seeLZ):
        self.baseURL = baseUrl
        self.seeLZ = '?see_lz='+str(seeLZ)
    #传入页码,获取该页帖子的代码
    def getPage(self,pageNum):
        try:
            url = self.baseURL+self.seeLZ+'&pn'+str(pageNum)
            request = urllib2.Request(url)
            response = urllib2.urlopen(request)
            result =  response.read()
            return result
        except urllib2.URLError,e:
            if hasattr(e,"reason"):
                print u"连接百度贴吧失败,错误原因",e.reason
                return None
    #获取帖子标题
    def getTitle(self):
        page = self.getPage(1)
        pattern = re.compile('<h3 class="core_title_txt.*?>(.*?)</h3>',re.S)
        result = re.search(pattern,str(page))
        if result:
            print result.group(1)  # 测试输出
            return result.group(1).strip()
        else:
            return None
baseURL = 'http://tieba.baidu.com/p/3138733512'
bdtb = BDTB(baseURL,1)
bdtb.getPage(1)
bdtb.getTitle()



运行:
这里写图片描述

### Python爬虫抓取百度贴吧内容的实例与教程 以下是关于如何使用Python编写一个简单的爬虫来抓取百度贴吧内容的具体实现方法: #### 依赖库安装 为了运行下面的代码,需要先安装`urllib`模块(通常随标准库提供),以及可能需要用到的其他辅助工具。如果缺少某些功能,可以考虑额外引入第三方库如`requests`和`BeautifulSoup`。 ```bash pip install requests beautifulsoup4 ``` #### 示例代码解析 以下是一个完整的脚本示例,用于从指定的百度贴吧页面下载HTML数据并保存至本地文件中[^1]。 ```python import urllib.parse import urllib.request def download_tieba_pages(tieba_name, start_page, end_page): """ 下载指定范围内的百度贴吧页面 参数: tieba_name (str): 吧名 start_page (int): 开始页码 end_page (int): 结束页码 """ # 设置请求头部信息模拟真实浏览器访问行为 headers = { 'User-Agent': ('Mozilla/5.0 (Windows NT 10.0; Win64; x64)' 'AppleWebKit/537.36 (KHTML, like Gecko) ' 'Chrome/69.0.3497.81 Safari/537.36') } # 对中文吧名进行编码转换处理以便正确拼接URL地址字符串 encoded_kw = urllib.parse.urlencode({'kw': tieba_name}) try: for page_num in range(start_page, end_page + 1): full_url = f"http://tieba.baidu.com/f?{encoded_kw}&ie=utf-8&pn={(page_num - 1)*50}" request_obj = urllib.request.Request(full_url, headers=headers) html_content = urllib.request.urlopen(request_obj).read() output_filename = f"C:/第{page_num}页_{tieba_name}.html" with open(output_filename, mode='wb') as file_handler: file_handler.write(html_content) print(f"{output_filename} has been successfully saved.") except Exception as e: print("An error occurred:", str(e)) if __name__ == "__main__": target_bar = input("请输入目标贴吧名称:") starting_point = int(input("请输入起始页数:")) terminating_point = int(input("请输入终止页数:")) download_tieba_pages(target_bar, starting_point, terminating_point) ``` 此段程序通过循环迭代每一页的内容链接,并将其存储为单独的 HTML 文件存放在 C:\路径下[^2]。 #### 注意事项 当构建网络爬虫时需要注意遵守网站的服务条款(TOS),避免频繁请求给服务器带来过大负担而导致IP被封禁等问题发生。此外,在实际应用过程中还应加入异常捕获机制提高稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值