静态爬取网页主要是使用requests和BeautifulSoup,以下面网站为例:
然后具体的操作不做赘述,直接放完整代码,以做记录
#歌曲下载-静态网页爬取
import requests
from bs4 import BeautifulSoup
import re
def geturl(url):
headers={"自己的headers"}
r=requests.get(url,headers=headers)
if r.status_code==200:
return r.text
else:
print("网站响应代码为{}".format(r.status_code))
def getlist(html):#此函数目的在于获得查询结果
count=[]
list1=[]
list2=[]
list3=[]
list4=[]
soup=BeautifulSoup(html,"html.parser")
count=soup.find_all("small",{"class":"float-right badge badge-pill badge-warning"})#获得所有结果的个数
print(count[0].text.replace("\n","").replace(" ",""))
list1=soup.find_all("div",{"class":"row"})#具体结果(歌名-歌手)在这个标签下面
for i in list1:
list2.append(i.text)
for i in range(0,len(list2)):
list3.append(list2[i].replace("\n","").replace(" ",""))
del list3[0]
for i in range(0,len(list3)):
list4.append(list3[i].replace("播放&下载",""))
for i in range(0,len(list4)):
print(list4[i])#list4就是最终整理好的数据
def getlc(url,html):#此函数目的在于下载歌词
ls1=[]
ls2=[]
ls3=[]
ls4=[]
ls5=[]#从这往上都是中转列表
ls6=[]
soup=BeautifulSoup(html,"html.parser")
ls1=soup.find_all("div",{"class":"col-8 col-content"})#这个标签下的所有都获取下来
for i in range(0,len(ls1)):
ls2.append(ls1[i].find_all("a"))#此时ls2里面都是具体的a标签内容,每个元素都是以字符串方式存储
for i in range(0,len(ls2)):
ls3.append(re.findall('href="(.*?)" target',str(ls2[i])))#使用正则表达式匹配链接
for i in range(0,len(ls3)):
ls4.append(url+str(ls3[i]).replace("[","").replace("]","").replace("'",""))#这一步是整理成完整的链接
for i in range(0,len(ls4)):#对链接进行循环爬取
r=geturl(ls4[i])
s=BeautifulSoup(r,"html.parser")
ls5=s.find_all("div",{"id":"content-lrc"})#歌词在这个标签下面
for j in range(0,len(ls5)):
ls6.append(ls5[j].text)#对所有歌词进行放置在ls6列表里面
print(ls6)#可以使用with-open格式对歌词进行保存,这里我选择单纯输出
def getsong(html):#这个网站歌曲有高低品质两种
lst1=[]
lst2=[]
soup = BeautifulSoup(html,'html.parser')#下载高品质音质-这个网站会跳转到迅雷网盘,这里只是获取网盘链接;低品质的我暂时没想到怎么使用BeautiSoup来爬取,我觉得应该不行
lst1=soup.find_all('script',type="text/javascript")
lst2=re.findall("window.mp3_extra_url = '(.*?)'",lst1[0].text)
print(lst2)#可以使用with-open格式对歌词进行保存,这里我选择单纯输出
def main():
m = input("请输入歌手或歌曲名:")
url1 = "https://www.gequbao.com/s/"
url = url1 + m
url2="https://www.gequbao.com"#在geturl里面ls4获取的链接应该是https://www.gequbao.com/music/*****格式
s=geturl(url)
getlist(s)
getlc(url2,s)
getsong(s)
main()
标签:静态方法,len,replace,爬取,soup,range,html,歌曲,append
From: https://blog.csdn.net/ldjdjdk/article/details/144020895