改进1:使用了urllib.request.urlretrieve方法
改进2:发现图片网址有的以http开头,有的以https开头,修改了网址变量b的表达方法
#爬虫实战
import requests,urllib.request
from bs4 import BeautifulSoup
import os
import datetime,time
import random
#获取当前年月日并创建以年月日命名的文件夹
today=datetime.date.today()
if not os.path.exists(f'{today}'):
os.makedirs(f'{today}') #如果没有这个path则直接创建
#爬虫部分
#头文件
header={"User-Agent":"Mozila/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari/537.36"} #利用header模拟是从谷歌浏览器发出请求
name=1
for i in range(40,46):
url='https://www.gamersky.com/ent/202009/1320641_{}.shtml'.format(i)
r=requests.get(url,headers=header)
r.encoding = r.apparent_encoding#解决中文乱码问题
html=r.text
soup=BeautifulSoup(html,'lxml')#lxml是解析器
list=soup.find_all('a') #图片地址在Mid2L_con类的P标签下的a标签里
for li in list:
address=li.get('href')
if '.jpg' in str(address):
## print(address) #已经获得URL,接下来是保存图片
if 'https' in address:
b=address[53:]
else:
b=address[52:]
## print(b)
urllib.request.urlretrieve(b, f'./{today}/{str(name)}.png')
## pic=requests.get(b,headers=header)
## f=open(f'./{today}/{str(name)}.png','ab')
## f.write(pic.content)
## f.close()
time.sleep(random.randint(1,5))
name +=1