|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 柿子饼同学 于 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')
- #后面不知怎么写了
复制代码
百度图片有数据接口,请求数据接口可以得到图片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)
复制代码
|
-
|