爬取糗图图片
代码如下:
import re
import urllib.request
import urllib.parse
import uuid
from tqdm import tqdm # 只是显示进度条用的
url_list = [] # 所有的地址列表
dowload_url = [] # 所有的下载地址
# 得到每个页面
def get_page(start_page,end_page):
# 糗图的地址
url = 'https://www.qiushibaike.com/imgrank/page/'
for i in range(start_page,end_page+1):
url_address = url + str(i) # 拼接是哪一页
url_list.append(url_address) # 把得到的具体页面地址加入到地址列表中
return url_list # 返回地址列表
# 设置请求头
def request_obj():
headers = {
# 这里改成自己的user-agent
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36 Edg/91.0.864.54',
}
return headers
# 得到图片下载地址
def get_img_url(urllist):
for url in urllist:
request = urllib.request.Request(headers=request_obj(),url=url)
# 得到每个地址的响应对象
response = urllib.request.urlopen(request)
# 正则匹配到的所有图片地址,findall返回的是一个列表
partner = re.findall(r'<img src="(.*?)" alt=".*?" class="illustration" width="100%" height="auto">',response.read().decode())
dowload_url = partner.copy()
return dowload_url
# 下载图片
def download_img(uulist):
for url in tqdm(uulist):
# 拼接图片下载地址
url = "https:"+url
uu = str(uuid.uuid4()) # 使用uuid给图片命名
img_url = uu[:8] + '.' + url.rsplit('.')[-1]
# 这里在当前目录下建立了一个tt文件夹存放图片,必须建文件夹
urllib.request.urlretrieve(url,filename='tt/'+img_url)
def main():
# 这里的get_page两个参数可以更改,这里只爬取一页
download_img(get_img_url(get_page(1, 1)))
if __name__ == '__main__':
main()
这里也可以用多线程爬取,多线程爬取以前已经写了,需要的可以看看我以前的爬虫文章。