这是利用python爬取豆瓣Top250电影图片,并下载在本地的一个文件夹中的例子,用了urllib.request.urlretrieve(),直接上代码了,注释说的很清楚哦
import urllib
import urllib.request,urllib.error
import re
from bs4 import BeautifulSoup
import time
def main():
baseurl="https://movie.douban.com/top250?start="
datalist = getData(baseurl)
#主函数,用于调用全局的函数和参数
findImgSrc = re.compile(r'<img.*src="(.*?)"', re.S)
#用正则表达式来匹配图片的的url
#调用了主网站的url
def getData(baseurl):
datalist=[]
#利用for循环来访问所有的url
for i in range(0,10):
url = baseurl + str(i*25) #遍历所有页面的url
html = askURL(url) #将获取的网页存进变量html中
soup = BeautifulSoup(html,"html.parser") #利用靓汤来对获取的页面源码进行获取并存入变量soup中
for item in soup.find_all('div',class_="item"): #进行网页源码初等的筛选和解析
item = str(item) # 转化为字符串
imgSrc = re.findall(findImgSrc, item)[0] #调用前面的findImgrc找到所有的图片url
imgSrc_name=imgSrc.split('/')[-1] #定义图片的名字以便于对文件名的循环,这里是利用url的特点将url进行列表分割,取最后一段,刚好带有.jpg
print(imgSrc_name) #这个主要用于浪费电
urllib.request.urlretrieve(imgSrc, filename=r"C:\Users\86188\Desktop\spider1\%s"%imgSrc_name)
#这一行是下载和保存,是最核心的一行,imgsrc是下载的地址,filename后是存储路径和文件名,刚好每循环一次下载一个
time.sleep(2.0) # 休息两秒,怕被封
return datalist #这里是返回datalist,不然没法调用
#这是访问所有url的函数
def askURL(url):
head = {
"不给你们看"怕id被禁,哈哈
}
#头文件
request = urllib.request.Request(url, headers=head)
#请求口令
html = ""
try: #捕获异常,如果很自信可以不用
response = urllib.request.urlopen(request) #将返回的数据存入response
html = response.read().decode("utf-8") #对response进行读取解析为我们能看懂的文字并存入html
# print(html)
except urllib.error.URLError as e: #如果出选报错就会运行这些
if hasattr(e, "code"):
print(e.code) #网页状态码
if hasattr(e, "reason"):
print(e.reason) #报错原因
return html
if __name__ == "__main__":
main()
print('已全部下载完成')
#主函数的调用
实现下载功能,算是在上一个文章递进吧,毕竟机器学习需要学习资料