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

编程入门 行业动态 更新时间:2024-10-11 03:16:50

从零开始的<a href=https://www.elefans.com/category/jswz/34/1770264.html style=爬虫生涯(三):爬取小姐姐的照片③(网站已停用)"/>

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

文章目录

  • 前言
  • 思路分析
    • 1.页面源码分析
    • 2.爬虫思路
  • 爬虫代码
    • 1.开发环境
    • 2.代码分解
      • (1)爬取每个分项url
    • (2)爬取页数
    • 3.整体代码
  • 爬取结果

前言

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

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


思路分析

1.页面源码分析

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

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


对于第二个问题,在翻了几页后我们发现他的翻页(如:)是由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 BeautifulSoupind = []
target_url = ""
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 BeautifulSouptarget_url = "/"
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 BeautifulSoupind = []
target_url = ""
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 = 0for 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 = 0name = html.find('h1').textprint(name)for img in img_list:img_url = img.get('src')result = requests.get(img_url).contentpath = '图片'if not os.path.exists(path):os.mkdir(path)f = open(path + '/' + name + str(num) + '.jpg', 'wb')f.write(result)num += 1print('正在下载{}第{}张图片'.format(name, num))

爬取结果

更多推荐

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

本文发布于:2024-02-25 12:38:22,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1698991.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:爬虫   从零开始   生涯   姐姐   照片

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!