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方法
评论 (0)