从零开始的爬虫生涯(三):爬取小姐姐的照片③(网站已停用)

前言

从这篇文章开始,我们将通过连续的几篇文章来爬取某妹网(url :https://imoemei.com/)的所有小姐姐照片。借这个例子我们一起学习简易的python爬虫。
前面的文章请看

从零开始的爬虫生涯(一):爬取小姐姐的照片①
从零开始的爬虫生涯(二):爬取小姐姐的照片②


思路分析

1.页面源码分析

经过前两次的爬取,我们已经取到了自拍分项下的小姐姐照片
但是现在我们的爬虫还有两个问题:
首先,网站不止自拍一个分项,
再其次,上一篇文章我们只取到了前30个页面的url,这对我们爬取全站照片的目标还有一点距离
对于第一个问题,我们只需爬取主页上面各个分项的url就可以解决
在这里插入图片描述

只要取到上面的每个a标签的herf就大功告成


对于第二个问题,在翻了几页后我们发现他的翻页(如:https://imoemei.com/meinv/page/2)是由page后面的数字来确定的

所以只要我们对这个数字进行修改就可以控制翻页了
问题又来了,每一个分项的总页面不一样,那我们应该怎么控制?
还是通过爬虫去取出页数
在这里插入图片描述
只要爬取到label标签,页数那不就有了吗?
然而事实并非如此
在这里插入图片描述
爬取label,发现啥也没爬到,而且之后我还尝试了爬label标签的父标签,结果还是啥也爬不出来
查阅资料后,我发现request只会返回html原网页,而目标网站的label标签是通过ajax来动态加载的

好在我又发现一个div块中藏着页数
但是他的页数是储存在属性中的
在这里插入图片描述
这可如何是好?
于是我想到了通过正则表达式来取出页数,最后终于成功

2.爬虫思路

对于问题一,直接按照之前文章的思路爬取分项的url

对于问题二,取出div块后先化成字符串,再用正则表达式取出页数

爬虫代码

1.开发环境

开发环境:win10 python3.6.8
使用工具:pycharm
使用第三方库:requests、os、BeatutifulSoup、re

2.代码分解

(1)爬取每个分项url

import requests
from bs4 import BeautifulSoup


ind = []
target_url = "https://imoemei.com"
r = requests.get(url=target_url)
html = BeautifulSoup(r.text, 'html5lib')
menu = html.find('ul', class_='menu')
indexs = menu.find_all('a')
#print(indexs)
for index in indexs:
    temp = index.get('href')
    ind.append(temp)
del ind[0]
print(ind)

(2)爬取页数

import requests
import re
from bs4 import BeautifulSoup

target_url = "https://imoemei.com/zipai/"
r = requests.get(url=target_url)
html = BeautifulSoup(r.text, 'html5lib')
b2_gap = html.find('div', class_='b2-pagenav post-nav box mg-t b2-radius')#这个div块里有页数
b2_gap = str(b2_gap)#先转换成字符串
regex = '(?<=pages=").[0-9_]*'#re匹配出页书
str_select = re.findall(regex,b2_gap)
print(str_select[0])

3.整体代码

import requests
import os
import re
from bs4 import BeautifulSoup

ind = []
target_url = "https://imoemei.com"
r = requests.get(url=target_url)
html = BeautifulSoup(r.text, 'html5lib')
menu = html.find('ul', class_='menu')
indexs = menu.find_all('a')
#print(indexs)
for index in indexs:
    temp = index.get('href')
    ind.append(temp)
del ind[0]

l = 0
for l in range(len(ind)+1):
    target_url = ind[l]
    r = requests.get(url=target_url)
    html = BeautifulSoup(r.text, 'html5lib')
    b2_gap = html.find('div', class_='b2-pagenav post-nav box mg-t b2-radius')  # 这个div块里有页数
    b2_gap = str(b2_gap)  # 先转换成字符串
    regex = '(?<=pages=").[0-9_]*'  # re匹配出页书
    str_select = re.findall(regex, b2_gap)
    
    v = 0
    for v in range(int(str_select[0]) + 1):
        target_url = ind[l] + "//page//" + str(v)
        r = requests.get(url=target_url)
        html = BeautifulSoup(r.text, 'html5lib')
        b2_gap = html.find('ul', class_='b2_gap')
        print(str(1) + "page is OK")
        img_main = b2_gap.find_all('a', class_='thumb-link')
        img_main_urls = []

        for img in img_main:
            img_main_url = img.get('href')
            img_main_urls.append(img_main_url)

        for j in range(len(img_main_urls) + 1):
            print(img_main_urls[j])
            r = requests.get(url=img_main_urls[j])

            html = BeautifulSoup(r.text, 'html5lib')
            entry_content = html.find('div', class_='entry-content')
            img_list = entry_content.find_all('img')
            img_urls = []
            num = 0
            name = html.find('h1').text
            print(name)

            for img in img_list:
                img_url = img.get('src')
                result = requests.get(img_url).content

                path = '图片'
                if not os.path.exists(path):
                    os.mkdir(path)

                f = open(path + '/' + name + str(num) + '.jpg', 'wb')
                f.write(result)
                num += 1
                print('正在下载{}第{}张图片'.format(name, num))


爬取结果

在这里插入图片描述

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值