用requests取图片的问题
本帖最后由 柿子饼同学 于 2021-3-22 10:40 编辑目标URL:https://image.baidu.com/search/albumsdetail?tn=albumsdetail&word=%E5%AE%A0%E7%89%A9%E5%9B%BE%E7%89%87&fr=albumslist&album_tab=%E5%8A%A8%E7%89%A9&album_id=688&rn=30【传送门】就是想取得前5张吧
我看的书上是用urllib.request取得图片,那如果用requests和bs4该怎么做呢
import requests as r
import bs4 as b
url = '''https://image.baidu.com/search/albumsdetail?tn=albumsdetail&word=%E5%AE%A0%E7%89
%A9%E5%9B%BE%E7%89%87&fr=albumslist&album_tab=%E5%8A%A8%E7%89%A9&album_id=688&rn=30'''
headers={"User-Agent":
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:85.0) Gecko/20100101 Firefox/85.0"}
res = r.get(url,headers = headers)
s = b.BeautifulSoup(res.text, 'html.parser')
link = s.find_all('div', class_ = 'albumsdetail-item')
#后面不知怎么写了
爬虫思路
1、获取真实的url信息
2、清洗数据
3、保存数据
思路是一样的,用什么方法都可以,这里建议你去学学requests和xpath,B站一搜一大把
不过你这要爬度娘的,他反爬比较溜,你这样不一定能爬的到 本帖最后由 小伤口 于 2021-3-22 13:08 编辑
import requests
from bs4 import BeautifulSoup
# 获取页面
def huo_qu(page_url):
# 加请求头
headers = {
'user-agent': ""'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.72 Mobile Safari/537.36 Edg/89.0.774.45'}
res = requests.get(page_url, headers=headers)
return res
# 查找图片下载链接,并保存链接
def xun_zhao(res):
# 用BeautifulSoup解析
soup = BeautifulSoup(res.text,features="lxml")
img_addrs = []
# 查找所有有img的标签
for link in soup.find_all('img'):
# 找到有src属性的链接并保存
if link.get('src') not in img_addrs:
img_addrs.append(link.get('src'))
if len(img_addrs)>=16:
break
return img_addrs
# 保存图片
def bao_cun(img_addrs):
for each in img_addrs:
filename = each.split('/')[-1]
r = requests.get(each)
with open(filename, 'wb') as f:
f.write(r.content)
# 主代码
def download_tx(temp, pages):
fenglei = {'欧美头像': 'oumei/', '清新头像': 'xiaoqingxin/', '恐怖头像': 'kongbu/', \
'可爱头像': 'keai/', '小孩头像': 'xiaohai/', '卡通头像': 'katong/', '古风头像': 'gufeng/', '搞笑头像': 'gaoxiao/'}
url = 'http://www.imeitou.com/' + fenglei
if pages == 1:
page_url = url
res = huo_qu(page_url)
img_addrs = xun_zhao(res)
bao_cun(img_addrs)
else:
page_url = url + 'index_' + str(pages) + '.html'
res = huo_qu(page_url)
img_addrs = xun_zhao(res)
bao_cun(img_addrs)
if __name__=="__main__":
temp=input('爬取类型(欧美头像 清新头像)')
pages=input('爬取第几页')
download_tx(temp, pages)
基本爬取一般的图片视频都这个步骤
好像我这个针对你这个网站不行获取的文本里都没有图片下载地址{:10_266:}
网页里好像没有下载地址{:10_245:}
只有单独点进去才会出现下载地址
我觉得不应该解析这个网页吧{:10_266:}
我爬虫很菜
不知道咋整,也想蹲个眼{:10_254:}
学习一下{:10_254:} 小伤口 发表于 2021-3-22 12:43
基本爬取一般的图片视频都这个步骤
好像我这个针对你这个网站不行获取的文本里都没有图片下载地址{:10_2 ...
那我先不设最佳答案? 柿子饼同学 发表于 2021-3-22 13:08
那我先不设最佳答案?
我发的也对你的没有帮助{:10_266:} 本帖最后由 柿子饼同学 于 2021-3-22 13:23 编辑
小伤口 发表于 2021-3-22 12:43
基本爬取一般的图片视频都这个步骤
好像我这个针对你这个网站不行获取的文本里都没有图片下载地址{:10_2 ...
好像人家都是贴吧里弄,这百度图片,不要也罢。。。{:10_262:} 百度图片有数据接口,请求数据接口可以得到图片url。
import requests
import os
from tqdm import tqdm
def save_img(wd, id_, url):
if not os.path.exists(wd):
os.mkdir(wd)
img_name = f'{wd}/{id_}.jpeg'
if not os.path.exists(img_name):
img = requests.get(url)
with open(img_name, 'wb') as f:
f.write(img.content)
def get_img(page):
url = 'https://image.baidu.com/search/albumsdata'# 数据接口
header = {'user-agent': 'Mozilla/5.0'}
rn = 30
word = '宠物图片'
for i in range(0, page):
pn = i * rn
params = {
'pn': pn,# 翻页参数(每一页+30)
'rn': rn,# 每一页图片数(固定30)
'tn': 'albumsdetail',# 类型(albumsdetail)
'word': word,# 关键词
'album_tab': '动物',# 专辑(例如你想爬动物,那么这个参数就是动物)
'album_id': 688,# 专辑id(动物专辑id是688)
'curPageNum': i# 翻页参数,页码
}
res = requests.get(url, headers=header, params=params).json()
imgs = res.get('albumdata').get('linkData')
for img in tqdm(imgs, f'第{i+1}页'):
img_id = img.get('pid')
img_url = img.get('thumbnailUrl')
save_img(word, img_id, img_url)
if __name__ == '__main__':
num = int(input('输入需要下载的页数:'))
get_img(num)
YunGuo 发表于 2021-3-23 01:55
百度图片有数据接口,请求数据接口可以得到图片url。
谢谢 柿子饼同学 发表于 2021-3-23 14:44
谢谢
https://fishc.com.cn/thread-189478-1-1.html
我来晚了,不然最佳一定是我的{:10_307:}
百度图片爬虫一条龙,手把手包教包会 柿子饼同学 发表于 2021-3-23 14:44
谢谢
https://fishc.com.cn/thread-189478-1-1.html
手把手一条龙,包教包会,百度爬虫{:10_307:} Daniel_Zhang 发表于 2021-3-24 22:39
https://fishc.com.cn/thread-189478-1-1.html
手把手一条龙,包教包会,百度爬虫
NB{:10_275:}
页:
[1]