爬取过程分析:
1、打开url:http://www.mmonly.cc/wmtp/wmwz/, 调出开发者工具,刷新页面
2、算了,不想分析了,比较简单( ̄^ ̄゜)
看看代码吧:
import urllib
import requests
from bs4 import BeautifulSoup
import os
def Download(url, picAlt, name):
path = 'D:\\pycharmproject\\spiderproject\\spiderphoto\\' + picAlt + '\\'
if not os.path.exists(path): # 判断系统是否存在该路径,不存在则创建
os.makedirs(path)
urllib.request.urlretrieve(url, '{0}{1}.jpg'.format(path, name)) # ,下载图片保存在本地
def run(targetUrl, beginNUM, endNUM):
resp = requests.get(targetUrl)
resp.encoding = 'gb2312'
html =resp.text
soup = BeautifulSoup(html, 'lxml')
Divs = soup.find_all('div', attrs={'id': 'big-pic'})
nowpage = soup.find('span', attrs={'class': 'nowpage'}).get_text() # 获取当前页码
totalpage = soup.find('span', attrs={'class': 'totalpage'}).get_text() # 获取所有页
if beginNUM == endNUM: # 跳出条件
return
for div in Divs: # 遍历所有大图所在的div,其实只有一个元素。因为前面使用的是find_all()方法得到的是集合,所以这要遍历了。有点不太实用 因为与照顾到语法使用全面的意思
beginNUM = beginNUM + 1
if div.find("a") is None: # 如果这张图片没有下一张图片的链接
print("没有下一张了")
return
elif div.find("a")['href'] is None or div.find("a")['href'] == "": # 有链接,但是是 空链接
print("没有下一张了")
return
if int(nowpage) < int(
totalpage): # nowpage,totalpage是str类型;(如果不转换成int来比较的话,totalPage是字符串“12”无法与‘1’‘2’这些单个字符的字符串比较)
nextPageLink = "http://www.mmonly.cc/wmtp/wmwz/" + (div.find('a')['href'])
elif int(nowpage) == int(totalpage):
nextPageLink = (div.find('a')['href'])
picLink = (div.find('a').find('img')['src']) # 本网站大图的SRC属性是下一张图片的链接
picAlt = (div.find('a').find('img'))['alt'] # 图片的名字alt属性
print('套图名:[ ', picAlt, ' ] ')
pic = requests.get(picLink)
Download(picLink, picAlt, nowpage)
run(nextPageLink, beginNUM, endNUM) # 递归
return
if __name__ == '__main__':
targetUrl = "http://www.mmonly.cc/wmtp/wmwz/298803.html"
run(targetUrl, beginNUM=0, endNUM=60) # 设置下载图片数量:endNUM-beginNUM 数字相减为总数量
print('下载完成')