python爬虫访问百度贴吧案例

简介: python爬虫访问百度贴吧案例
  • 需求:
    1.爬取贴吧名称 ,以海贼王为例
    2.要进行翻页爬取(起始页,中止页)
    3.把每一页的内容保存到本地

页面分析

分析url 翻页爬取的时候:大多数情况下是需要分析url的规律

找出海贼王贴吧前三页的url如下:
https://tieba.baidu.com/f?ie=utf-8&kw=%E6%B5%B7%E8%B4%BC%E7%8E%8B&fr=search(第一页)
https://tieba.baidu.com/f?kw=%E6%B5%B7%E8%B4%BC%E7%8E%8B&ie=utf-8&pn=50(第二页)
https://tieba.baidu.com/f?kw=%E6%B5%B7%E8%B4%BC%E7%8E%8B&ie=utf-8&pn=100(第三页)

经验证,第一页的也可以写作:
https://tieba.baidu.com/f?kw=%E6%B5%B7%E8%B4%BC%E7%8E%8B&ie=utf-8&pn=0(第一页)

使用input(),从控制台输入想要查找的内容

代码一般写法

import urllib.request
import urllib.parse

name = input("请输入贴吧名称")
headers = {
    
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36'
}

# 起始页
begin = int(input("请输入开始页"))
# 结束页
end = int(input("请输入结束页"))
kw = {
    'kw': name}
result = urllib.parse.urlencode(kw)

# 拼接url
for i in range(begin, end+1):  # 整数序列,range范围是左闭右开
    pn = (i-1)*50
    # print(pn)
    base_url = 'https://tieba.baidu.com/f?'
    url = base_url + result + '&pn=' + str(pn)
    # 发请求
    req = urllib.request.Request(url, headers=headers)
    res = urllib.request.urlopen(req)  # 发起请求,获得响应
    # print(res.getcode())  # 得到响应码,200表示请求成功
    html = res.read().decode('utf-8')
    # print(html)

    # 写入文件
    filename = '第'+str(i) + '页.html'
    with open(filename, 'w', encoding='utf-8') as f:
        f.write(html)
        print(f'正在爬取第{
      i}页')  

函数写法

import urllib.request
import urllib.parse


# 分析功能:读取页面,写入文件,主函数
def readPage(url):
    headers = {
    
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36'
    }
    # 发请求
    req = urllib.request.Request(url, headers=headers)
    res = urllib.request.urlopen(req)  # 发起请求,获得响应
    # print(res.getcode())  # 得到响应码,200表示请求成功
    html = res.read().decode('utf-8')
    return html


def writePage(filename, html):
    with open(filename, 'w', encoding='utf-8') as f:
        f.write(html)


def main():
    name = input("请输入贴吧名称")
    # 起始页
    begin = int(input("请输入开始页"))
    end = int(input("请输入结束页"))
    # 中文网址有问题,需要对name进行处理
    kw = {
    'kw': name}
    result = urllib.parse.urlencode(kw)
    # 拼接url
    for i in range(begin, end + 1):  # 整数序列,range范围是左闭右开
        pn = (i - 1) * 50
        # print(pn)
        base_url = 'https://tieba.baidu.com/f?'
        url = base_url + result + '&pn=' + str(pn)
        # 调用函数
        html = readPage(url)
        filename = '第'+str(i) + '页.html'
        writePage(filename, html)


if __name__ == '__main__':  # 程序主入口
    main()

面向对象写法

import urllib.request
import urllib.parse


class BaiduSpider(object):
    def __init__(self):
        self.headers = {
    
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36'
        }
        self.base_url = 'https://tieba.baidu.com/f?'

    def readPage(self, url):
        # 发请求
        req = urllib.request.Request(url, headers=self.headers)
        res = urllib.request.urlopen(req)  # 发起请求,获得响应
        # print(res.getcode())  # 得到响应码,200表示请求成功
        html = res.read().decode('utf-8')
        return html

    def writePage(self, filename, html):
        with open(filename, 'w', encoding='utf-8') as f:
            f.write(html)

    def main(self):
        name = input("请输入贴吧名称")
        # 起始页
        begin = int(input("请输入开始页"))
        end = int(input("请输入结束页"))
        # 中文网址有问题,需要对name进行处理
        kw = {
    'kw': name}
        result = urllib.parse.urlencode(kw)
        # 拼接url
        for i in range(begin, end + 1):  # 整数序列,range范围是左闭右开
            pn = (i - 1) * 50
            # print(pn)
            url = self.base_url + result + '&pn=' + str(pn)
            # 调用函数
            html = self.readPage(url)
            filename = '第' + str(i) + '页.html'
            self.writePage(filename, html)


if __name__ == '__main__':
    spider = BaiduSpider()  # 创建实例对象
    spider.main()
目录
相关文章
|
8天前
|
数据采集 存储 JSON
Python网络爬虫教程概览
【6月更文挑战第21天】Python网络爬虫教程概览:安装requests和BeautifulSoup库抓取网页;使用HTTP GET请求获取HTML,解析标题;利用CSS选择器提取数据;处理异步内容可选Selenium;遵循爬虫策略,处理异常,尊重法律与网站规定。
17 1
|
17小时前
|
数据采集 前端开发 Java
Python简单爬虫案例
用pyhton从网页中爬取数据,是比较常用的爬虫方式。网页一般由html编写,里面包含大量的标签,我们所需的内容都包含在这些标签之中,除了对python的基础语法有了解之外,还要对html的结构以及标签选择有简单的认知,下面就用爬取fl小说网的案例带大家进入爬虫的世界。
|
6天前
|
人工智能 数据挖掘 大数据
538个代码示例!麻省理工教授的Python程序设计+人工智能案例实践
Python简单易学,且提供了丰富的第三方库,可以用较少的代码完成较多的工作,使开发者能够专注于如何解决问题而只花较少的时间去考虑如何编程。 此外,Python还具有免费开源、跨平台、面向对象、胶水语言等优点,在系统编程、图形界面开发、科学计算、Web开发、数据分析、人工智能等方面有广泛应用。 尤其是在数据分析和人工智能方面,Python已成为最受开发者欢迎的编程语言之一,不仅大量计算机专业人员选择使用Python进行快速开发,许多非计算机专业人员也纷纷选择Python语言来解决专业问题。 由于Python应用广泛,关于Python的参考书目前已经有很多,但将Python编程与数据分析、人工智
|
3天前
|
Python
Python实用案例代码详解
Python实用案例代码详解
12 2
|
3天前
|
数据采集 机器学习/深度学习 数据可视化
利用Python进行网络爬虫和数据抓取
在当今数字化时代,数据是无处不在的。从市场趋势到个人偏好,从社交媒体活动到商业智能,数据扮演着关键的角色。然而,访问、处理和利用数据并不总是轻而易举的。幸运的是,Python提供了一套强大而灵活的工具,使得网络爬虫和数据抓取成为可能。本文将深入探讨如何利用Python进行网络爬虫和数据抓取,为您打开数据世界的大门。
|
13天前
|
数据采集 存储 数据挖掘
Python网络爬虫实战:抓取并分析网页数据
使用Python的`requests`和`BeautifulSoup`,本文演示了一个简单的网络爬虫,抓取天气网站数据并进行分析。步骤包括发送HTTP请求获取HTML,解析HTML提取温度和湿度信息,以及计算平均温度。注意事项涉及遵守robots.txt、控制请求频率及处理动态内容。此基础爬虫展示了数据自动收集和初步分析的基础流程。【6月更文挑战第14天】
92 9
|
7天前
|
数据采集 存储 分布式计算
Nutch爬虫在大数据采集中的应用案例
Nutch爬虫在大数据采集中的应用案例
|
8天前
|
机器学习/深度学习 自然语言处理 数据可视化
文本挖掘与可视化:生成个性化词云的Python实践【7个案例】
词云(Word Cloud),又称为文字云或标签云,是一种用于文本数据可视化的技术,通过不同大小、颜色和字体展示文本中单词的出现频率或重要性。在词云中,更频繁出现的单词会显示得更大,反之则更小。
|
8天前
|
机器学习/深度学习 自然语言处理 数据可视化
文本挖掘与可视化:生成个性化词云的Python实践【7个案例】
词云是文本数据可视化的工具,显示单词频率,直观、美观,适用于快速展示文本关键信息。 - 用途包括关键词展示、数据探索、报告演示、情感分析和教育。 - 使用`wordcloud`和`matplotlib`库生成词云,`wordcloud`负责生成,`matplotlib`负责显示。 - 示例代码展示了从简单词云到基于蒙版、颜色和关键词权重的复杂词云生成。 - 案例覆盖了中文分词(使用`jieba`库)、自定义颜色和关键词权重的词云。 - 代码示例包括读取文本、分词、设置词云参数、显示和保存图像。
25 1
|
1天前
|
数据采集 JavaScript 数据安全/隐私保护
经验大分享:python爬虫
经验大分享:python爬虫