"""爬取斗图吧里面的所有表情包 知识点总结: 一、使用requests库进行爬取,随机请求头(网站反爬措施少。挂个请求头足矣) 二、具体思路: 1.先爬取所有的图片url,放在列表里 2.循环遍历url请求这些图片, 3.将图片进行分类保存三、分类保存用到一个知识点,endwith(以***结尾) 使用这个函数,将jpg,gif,png等不同类型的图片分开四、演示案例中,只爬取了前20页。五、各个定义的数字变量意思为: n=1 网页页数 num=1 保存图片数 注:该案例主要是练习 1.图片的保存,应注意,保存时使用字节流的形式。 2.书写爬虫代码的逻辑思维。"""from fake_useragent import FakeUserAgentimport requestsimport reimport timeimport randomdef getUrls(): # 将获取到的url列表在放到list这个列表里 url_list=[] n=1 while True: url = f"http://www.doutula.com/article/list/?page={n}" headers = { "User-Agent":FakeUserAgent().random } htmlStr = requests.get(url,headers=headers).text # print(htmlStr) # 定义 提取图片url的正则 urls = r‘data-original="(.*?)"‘ # 编译 urls = re.compile(urls) #正则提取 urls = re.findall(urls,htmlStr) url_list.append(urls) print("正在收集第%s页的图片"%n) n = n + 1 # 设置延时 time.sleep(0.5) # 当n=21的时候,爬虫程序停止.为了演示方便只保存前二十页其实共有615页 if n == 21: break print(len(url_list)) return url_list # 保存图片# 以字节的形式将图片保存def download(url_list): num = 1 for urls in url_list: for url in urls: header={ "User-Agent":FakeUserAgent().random } # 因为爬取到的图片有两种,所以写了一个判断条件,分类保存, if url.endswith(‘.jpg‘): # 保存到本地 with open(‘./img/%s.jpg‘%num,‘wb‘) as file: # 获取到图片 字节 img = requests.get(url, headers=header) file.write(img.content) print("正在保存第%s张图片"%num) num += 1 time.sleep(0.3) elif url.endswith(‘.gif‘): # 保存到本地 with open(‘./img/%s.gif‘ % num, ‘wb‘) as file: # 获取到图片 字节 img = requests.get(url, headers=header) file.write(img.content) print("正在保存第%s张图片" % num) num += 1 time.sleep(0.3) if __name__ == ‘__main__‘: url_list=getUrls() download(url_list)
原文地址:https://www.cnblogs.com/YangQingHong/p/11006257.html
时间: 2024-11-01 23:48:21