Python学习笔记|爬虫案例

Bruce
2024-01-13 / 0 评论 / 37 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2024年01月13日,已超过312天没有更新,若内容或图片失效,请留言反馈。
AI摘要:本文介绍了使用Python进行爬虫的案例。第一个案例是爬取网易云音乐网站,包括获取单张图片、获取单首歌曲和获取单个mv的操作。第二个案例是爬取百度贴吧,包括根据关键词检索贴吧、保存网页内容和翻页操作。最后,将翻页代码改写为面向对象的代码。

案例一、爬取网易云音乐网站

import requests
import random
from fake_useragent import UserAgent

# 1.获取单张图片
# 获取url
url1 = 'https://p1.music.126.net/omxC-mmwgGHbacIVBZYNkA==/109951163028873411.jpg?param=200y200'

# 构造请求头
headers = {
    'User-Agengt':UserAgent().random
}

# 发送请求,获取响应
res1 = requests.get(url1, headers = headers)

# 保存图片
with open('一个人.jpg','wb') as f:
    f.write(res1.content)

# 2. 获取单手歌曲
# 获取网址
url2 = 'https://m701.music.126.net/20240113124750/0c218430fd0a7e23aa73b9e4e3f926d9/jdyyaac/obj/w5rDlsOJwrLDjj7CmsOj/32302219432/54d2/272e/a653/43e8586f4bba5975f507bf07b738eb7d.m4a'

# 发送请求,获取响应
res2 = requests.get(url2, headers = headers)

# 保存音乐
with open('尊嘟就酱.m4a','wb') as f:
    f.write(res2.content)

# 3. 获取单个mv
# 获取网址
url3 = 'https://bsdcdn.qnqcdn.net/vodkgeyttp8.vod.126.net/cloudmusic/0e1a/core/d1d2/0419131502ae8d52133f77468fbabd3e.mp4?wsSecret=d3064674834950f32dc19a36bd9ecef7&wsTime=1705120280'

# 发送请求,获取请求
res3 = requests.get(url3, headers = headers)

# 保存mv
with open('傻子与白痴2023.mp4','wb') as f:
    f.write(res3.content)

案例二、百度贴吧

import requests

search = input('请输入检索关键词:')

url = f'https://tieba.baidu.com/f?ie=utf-8&kw={search}'

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36'
}

res = requests.get(url, headers = headers)

with open(f'{search}.html','wb') as f:
    f.write(res.content)
# 百度贴吧翻页操作
import requests

#根据每一页的url寻找规律
# https://tieba.baidu.com/f?kw=%E9%AD%81%E6%8B%94&ie=utf-8&pn=0
# https://tieba.baidu.com/f?kw=%E9%AD%81%E6%8B%94&ie=utf-8&pn=50
# https://tieba.baidu.com/f?kw=%E9%AD%81%E6%8B%94&ie=utf-8&pn=100
# kw:检索关键词;pn:页码 其中ie可以省略

url = 'https://tieba.baidu.com/f?'

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36'
}

keyword = input('请输入检索关键词:')
page = int(input('请输入要保存的页数:'))

for i in range(page):
    
    #构造请求参数字典
    params = {
        'kw': keyword,
        'ie': 'utf-8',
        'pn': i*50
    }
    # 发送请求
    response = requests.get(url, headers = headers, params = params)

    #保存数据
    with open(f'{keyword}{i+1}.html','wb') as f:
        f.write(response.content)
# 将翻页代码改写为面向对象的代码
import requests

class Tieba:
    # 定义初始化方法
    def __init__(self):
        # 定义贴吧的url
        self.url = 'https://tieba.baidu.com/f?'
        # 定义请求头,伪装成浏览器
        self.headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36'
        }
        # 定义请求参数
        self.params = {}

    # 定义发送请求的方法
    def send(self):
        # 使用requests库的get方法,发送请求,并返回响应的文本内容
        res = requests.get(self.url, headers=self.headers, params=self.params)
        return res.text

    # 定义保存数据的方法
    def save(self, page, con):
        # 打开文件,以写入模式,编码为utf-8
        with open(f'{page}.html', 'w', encoding='utf-8') as f:
            # 将内容写入文件
            f.write(con)

    # 定义运行的方法
    def run(self):
        # 输入搜索的关键词
        word = input("请输入贴吧检索关键词:")
        # 输入需要下载的页数
        pages = int(input('请输入下载页数:'))

        # 更新请求参数
        self.params = {
            'kw': word,
            'pn': 0
        }

        # 循环下载每一页的内容
        for page in range(pages):
            # 更新请求参数中的页数
            self.params['pn'] = page * 50
            # 发送请求,并获取响应内容
            data = self.send()
            # 保存内容到文件
            self.save(page, data)

# 创建Tieba类的实例
te = Tieba()
# 调用实例的run方法
1

评论 (0)

取消