pythonSpider_requests获取豆瓣音乐信息写入csv

简介: pythonSpider_requests获取豆瓣音乐信息写入csv

查看网页

歌名

表演者

特点

都是在<span class="pl">里面,可以使用正则表达式提取出来

正则提取

对html的节点进行提取

#正则提取风格、时间、出版人
findStyle=re.compile(r'<span class="pl">流派:</span>&nbsp;(.*?)<br />',re.S)# re.S忽略换行
findTime=re.compile(r'<span class="pl">发行时间:</span>&nbsp;(.*?)<br />',re.S)
findPublish=re.compile(r'<span class="pl">出版者:</span>&nbsp;(.*?)<br />',re.S)

实现

import requests,time,urllib.request,urllib
from  bs4 import BeautifulSoup #需要安装xlml库
import  csv,re
#正则提取风格、时间、出版人
findStyle=re.compile(r'<span class="pl">流派:</span>&nbsp;(.*?)<br />',re.S)# re.S忽略换行
findTime=re.compile(r'<span class="pl">发行时间:</span>&nbsp;(.*?)<br />',re.S)
findPublish=re.compile(r'<span class="pl">出版者:</span>&nbsp;(.*?)<br />',re.S)
headers={
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36"
}
def get_url_music(filename,url):#访问url,提取出链接
    html=requests.get(url,headers=headers)
    soup=BeautifulSoup(html.text,'lxml') #
    aTags=soup.find_all('a',attrs={'class':'nbg'})#链接
    for aTag in aTags:
        new=aTag['href']
        get_music_info(filename,new)#调用
    return True
def get_music_info(filename,url):#进入链接
    html=requests.get(url,headers=headers)
    htmlText=html.text
    print(htmlText)
    soup=BeautifulSoup(htmlText,'lxml') #
    name=soup.find(attrs={'id':'wrapper'}).h1.span.text#歌名
    author=soup.find(attrs={'id':'info'}).find('a').text#发行者
    styles=re.findall(findStyle,htmlText)[0]#风格
    styles=re.sub('<br(\s+)?/>(\s+)?','',styles)
    styles = re.sub('/', ' ', styles)
    styles = "".join(styles.split())#前后空格
    # styles = re.findall('<span class="pl">流派:</span>&nbsp;(.*?)<br/>',htmlText)  # 风格
    style = '未知' if len(styles)==0 else styles#处理前后空格
    time=re.findall(findTime,htmlText)[0]#时间
    time="".join(time.split())
    publishers=re.findall(findPublish,htmlText)
    publisher='未知' if len(publishers)==0 else publishers[0].strip()
    info={
        'name':name,
        'author':author,
        'style':style,
        'time':time,
        'publisher':publisher
    }#结果字典数据
    print(info)
    save_csv(filename,info)#保存数据
    return info
def save_csv(filename,info):#写入每一列的数据
    with open(filename,'a',encoding='utf-8') as f:
        fieldnames=['name','author','style','time','publisher']
        writer=csv.DictWriter(f,fieldnames=fieldnames)#列数据
        writer.writerow(info)
if __name__=='__main__':
    urls=['https://music.douban.com/top250?start={}'.format(str(i)) for i in range(0,1,25)]
    print(urls)
    filename='douban_music.csv'
    with open(filename,'w',encoding='utf-8')as f:
        fieldnames=['name','author','style','time','publisher']
        writer=csv.DictWriter(f,fieldnames=fieldnames) # 表头
        writer.writeheader()
    for url in urls:
        get_url_music(filename,url)#调用
        time.sleep(1)#延迟1

结果

处理换行

添加newlinew

加上newline=''

def save_csv(filename,info):#写入每一列的数据
    with open(filename,'a',encoding='utf-8',newline='') as f:# newline解决换行
        fieldnames=['name','author','style','time','publisher']
        writer=csv.DictWriter(f,fieldnames=fieldnames)#列数据
        writer.writerow(info)

代码:我的仓库

目录
相关文章
|
6月前
|
存储 人工智能 人机交互
Multi-Agent Orchestrator:亚马逊开源AI智能体自动协作黑科技!重构人机交互逻辑,1秒精准分配任务
Multi-Agent Orchestrator 是亚马逊开源的多智能体框架,能够动态分配代理、维护上下文、支持多种代理类型,适用于客户服务、智能交通、物流配送等复杂场景。
245 9
Multi-Agent Orchestrator:亚马逊开源AI智能体自动协作黑科技!重构人机交互逻辑,1秒精准分配任务
|
7月前
|
机器学习/深度学习 测试技术 API
1分钟读完100万字,Qwen2.5-Turbo上线长文本
1分钟读完100万字,Qwen2.5-Turbo上线长文本
|
机器人 API UED
Gradio 流式输出教程
本文是Gradio流式输出教程,介绍了如何通过Gradio的Blocks API实现聊天机器人的流式文本输出,包括两个示例:一个简单的ChatBot流式输出示例和一个更复杂的输入处理与输出分离的流式输出示例,旨在改善用户体验并为实时处理积累技术。
Gradio 流式输出教程
|
机器学习/深度学习 前端开发 安全
【Gradio】Could not create share link
【Gradio】Could not create share link
6022 7
|
人工智能 自然语言处理 开发工具
Agent调研--19类Agent框架对比(下)
Agent调研--19类Agent框架对比(下)
3655 0
|
Java 应用服务中间件 Android开发
eclipse项目导入到idea
eclipse项目导入到idea
395 0
|
机器学习/深度学习 算法 固态存储
深度学习算法工程师面试问题总结| 深度学习目标检测岗位面试总结
本文给大家带来的百面算法工程师是深度学习目标检测岗位面试总结,文章内总结了常见的提问问题,旨在为广大学子模拟出更贴合实际的面试问答场景。在这篇文章中,我们还将介绍一些常见的深度学习目标检测面试问题,并提供参考的回答及其理论基础,以帮助求职者更好地准备面试。通过对这些问题的理解和回答,求职者可以展现出自己的深度学习目标检测领域的专业知识、解决问题的能力以及对实际应用场景的理解。同时,这也是为了帮助求职者更好地应对深度学习目标检测岗位的面试挑战,提升面试的成功率和竞争力。
|
测试技术
【细胞识别】YOLOv8实现CBC细胞检测
【细胞识别】YOLOv8实现CBC细胞检测
209 0
|
SQL 数据挖掘 数据格式
Python数据分析(二):DataFrame基本操作
查看数据(查看对象的方法对于Series来说同样适用)
1429 0
|
Windows
Mac移动硬盘直接拔掉后,再插上无法显示的解决办法
Mac移动硬盘直接拔掉后,再插上无法显示的解决办法