python学习1:爬取指定网址图片

一、思路:

1、分析网站,获取网址图片的流程

初始网址http://www.meiwall.com/ugirls
index网址:http://www.meiwall.com/ugirls/260.html          
带页码网址:http://www.meiwall.com/ugirls/260_3.html

2、具体步骤

a、get_data获取初始网址内容(初始网址http://www.meiwall.com/ugirls)

b、get_index获取index网址(index网址:http://www.meiwall.com/ugirls/260.html

c、get_data获取index网址内容

c、get_maxpages获取最大页码,拼接出带页码的网址(带页码网址:http://www.meiwall.com/ugirls/260_3.html

d、get_data获取带页码网址内容

e、get_imge获取图片并保存

二、代码:

import urllib.request
import re
import os
import string
from  urllib.parse import quote
import gzip


#通过网址获取网址内容
def get_data(url):
  headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/537.36 LBBROWSER'}
  url = quote(url, safe=string.printable)
  get_html = urllib.request.Request(url=url, headers=headers)
  get_data=urllib.request.urlopen(get_html).read()
  # get_data=gzip.decompress(get_data).decode("utf-8")
  return get_data.decode("utf-8")


def get_index(data):
  re_index=r'<a href="(http://www.meiwall.com/ugirls/\d+?\.html)" target="_blank">'
  re_index=re.compile(re_index)

  index_urls=re.findall(re_index,data)
  index_urls=list(index_urls)
  print('二级网址:',index_urls)
  return index_urls

#获取最大页码
def get_maxpage(data):
  re_maxpage= r'<a class="page-numbers" href="http://www.meiwall.com/ugirls/\d+?\D(\d+?)\.html" title="最后页">'
  re_maxpage=re.compile(re_maxpage)
  maxpages=re.findall(re_maxpage,data)
  maxpages=int(list(maxpages)[0])
  print('最大页码:',maxpages)
  return maxpages

def get_imge(second_data,i,y):
  #< img src = "https://mtl.ttsqgs.com/css/logo.jpg"
  #< img src = "https://pic4.zhimg.com/50/bf6142aa8853b15109982f4b722283f9_hd.jpg"
  re_imge=r'<img src="(http://.+?\.jpg)"'
  re_imge=re.compile(re_imge)
  print(re_imge)
  imge_urls=re.findall(re_imge,second_data)
  imge_urls=list(imge_urls)
  print('图像地址:',imge_urls)
  path='D:/美窝网/'+str(y)+'//'
  if not os.path.isdir(path):
      os.makedirs(path)
  paths=path+'//'

  for imge_url in imge_urls:

    urllib.request.urlretrieve(imge_url,'{}{}.jpg'.format(paths,str(i)))

  return imge_url

#开始调用
 #h通过主页获取一级网址
data=get_data('http://www.meiwall.com/ugirls')

index_urls=get_index(data)
print('二级网址汇总:',index_urls)
y=0
for  index_url in index_urls:
    second_data = get_data(index_url)
    maxpages = get_maxpage(second_data)
    print('最大页码:',maxpages)

    for i in range(1,maxpages+1):
      page_url=index_url.replace('.html',"_"+str(i)+'.html')
      print('带页码的网址:',page_url)
      page_data=get_data(page_url)

      print(get_imge(page_data,i,y))
    y=y+1

三、学习内容

1、正则表达式

可以通过先用完整的字符串最为正则表达式,然后逐个替换为 预定义字符集和数量词

如下:

观察我们要获取的网址,发现就是数字是变动的,可以用\d代表数字,+代表数量大于一次,?代表非贪婪,\.是因为要转义

re_index=r'<a href="(http://www.meiwall.com/ugirls/260.html)" target="_blank">'
re_index=r'<a href="(http://www.meiwall.com/ugirls/\d+?\.html)" target="_blank">'

2、for循环

要注意的是因为每页一个图片,所以要有一个循环增长的数字来作为图片名称

print(get_imge(page_data,i,y))

此处的入参i,是为了给获取图片名称的时候,进行增长的

urllib.request.urlretrieve(imge_url,'{}{}.jpg'.format(paths,str(i)))
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值