提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
上文讲到了response使用详情
本文讲解解析数据的第一种方法:正则表达式
提示:以下是本篇文章正文内容,下面案例可供参考
尽量使用泛匹配,使用括号得到匹配目标、尽量使用非贪婪模式、有换行符就用re.S
a:利用解析方法,写的通用解析公式
b:将要解析的数据
c:re.S如果有多行要解析的数据
注意利用好正则表达式写法,正则表达式非常容易写错,假如返回值为空的话,基本是正则表达式的语法有问题。需要非常仔细!
'''
1、明确目标站点
2、明确爬取的需求
今日需求,标题 图片(保存到本地) 详情页连接 ,以及翻页
'''
import requests,re,os
# url = 'https://book.douban.com/latest?subcat=%E5%85%A8%E9%83%A8&p=4'
header ={
这里是自己电脑浏览器的User-Agent
}
def get_data():
response = requests.get(url_f, headers=header)
text = response.text
return text
def analysis(data):
z = ''\
'.*?(.*?).*?(.*?)
'#解析语法
res = re.findall(z,data,re.S)
for data in res:
img = data[0]
web = data[1]
name = data[2]
author = data[3].strip()
print("图片:",img)
print("网站:",web)
print("书名:",name)
print("作者:",author)
print("================")
save_img(img,web,name,author)
#现在想把图片单独保存下来以jpg格式,,需要利用os模块,
def save_img(i,w,n,a):
# 要想保存图片 第一步就是得请求图片二进制数据
img_data = requests.get(i).content
with open('db.txt','a',encoding='utf-8')as f:
f.write('图片:'+i+'\n')
f.write('网址:'+w+'\n')
f.write('名字:'+n+'\n')
f.write('作者:'+a+'\n')
if not os.path.exists('DATA'):
os.makedirs('DATA')
with open('DATA/{}.jpg'.format(n),'wb')as f:
f.write(img_data)
if __name__ == '__main__':
#翻页直接写在main函数里面
url = 'https://book.douban.com/latest?subcat=%E5%85%A8%E9%83%A8&p={}'
for i in range(1,16):
print(f"========正在打印第{i}页")
url_f = url.format(i)
a = get_data()
analysis(a)
import os,requests,re
shouye_url = 'https://www.hifini.com/'
headers = {
这里是自己电脑浏览器的User-Agent
}
def get_data(url):
response = requests.get(url,headers=headers)
res = response.text
if response.status_code==200:
return res
def parse_data(data):
#获取歌曲网站,名字,MP3
z = '.*?(.*?)'
res = re.findall(z,data,re.S)
for i in res:
# https: // hifini.com / thread - 21844.htm
web = 'https://www.hifini.com/'+i[0]
name =i[1]
print(f'歌曲网站:{web}')
print(f'歌曲名字:{name}')
get_song_link(web)
# https://www.hifini.com / get_music.php?key = ZPt2g / X4pu1ERvOFnfadi7AUrqXn9Pdex424u9p9WB2QZYhvirHjHcWOej1AlDsdz4HAkJdj7cxgVgXksnmvvw
def get_song_link(link):
xiangqingye = requests.get(link,headers=headers)
xiangqingye_text = xiangqingye.text
# print(xiangqingye_text)#详情页源码
song_re = "music:\s\[.*?title:\s'(.*?)',.*?url:\s'(.*?)',"
x = re.findall(song_re,xiangqingye_text,re.S)
# print('歌曲信息:',x)
for i in x:
song_name = i[0]
song_link = 'https://www.hifini.com/'+i[1]
# print('歌名:',song_name)
# print('歌曲资源:',song_link)
song_content = requests.get(song_link,headers=headers).content#请求歌曲二进制资源
print(song_content)
if not os.path.exists('歌曲'):
os.makedirs('歌曲')
with open('歌曲\{}.m4a'.format(song_name),'wb')as f:
f.write(song_content)
if __name__ == '__main__':
a = get_data(shouye_url)
parse_data(a)