涉及到3个知识点
1、创建文件夹,如果没有文件夹则创建(exist_ok为True,False为有文件夹就不创建),(第8行)
2、requests请求,可以判断返回的状态码是否非200,如果非200,则报错(代码第10行)
3、现实运用中requests和BeautifulSoup这2个是连在一起用的,BeautifulSoup解析文件,基本是解析requsts的返回值,(代码第11hang)
4、图片文件如果要保存需要用二进制wb来保存到本地,且保存文件有2中方式
1.for chunk in img_content.iter_content(100000): #100000表示最多支持大小为十万字节的文件
file.write(chunk)
2.img_content = requests.get(real_url,verify=False).content #content转为二进制文件
file.write(img_content)
# encoding: utf-8
import os
import requests
from bs4 import BeautifulSoup
import urllib3
urllib3.disable_warnings()
os.makedirs('image',exist_ok=True)
url = 'https://xkcd.com'
while not url.endswith("#"):
res = requests.get(url, verify=False)
res.raise_for_status() # 如果返回的状态码非200,则报错,因为可能返回302,401等之类的数据,html的数据就不是我们需要的
soup = BeautifulSoup(res.text, 'html.parser')
img = soup.select("#comic img")
real_url = url + img[0].get("src")
# img_content = requests.get(real_url,verify=False).content
img_content = requests.get(real_url, verify=False)
# print(type(img_content))
filename = os.path.basename(real_url)
path = 'C:/Users/Mloong/Desktop/高铁新增/pandadas/image' + '/' + filename
with open(path, 'wb') as file:
# file.write(img_content)
for chunk in img_content.iter_content(100000):
file.write(chunk)
prev = soup.select("a[rel='prev']")[0]
# print(prev.get('href'))
url = 'http://xkcd.com' + prev.get('href')
# 保存图片有2种方法,一种通过request的contetnt (转为字节bytes,因为图片保存只能通过保存字节),一种通过request的iter_content也是bytes