伪。 发表于 2019-12-4 09:39:17

【简单爬虫】 爬取妹子图 自动下载 [改进]

本帖最后由 伪。 于 2019-12-4 09:40 编辑

改自: 【作品展示】闲来无事做了个半自动获取妹子图的爬虫

新增:
1.根据套图分类文件夹,将一个套图下载到一个文件夹。
2.自动创建文件夹。
3.自动读取下一页内容。
4.已经下载过的将不再进行下载。


# 爬取妹子图
import requests
import os
from bs4 import BeautifulSoup

MZITU = 'https://www.mzitu.com'

USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36'

HEADERS = {
    'User-Agent': USER_AGENT,
    'Referer': MZITU}

SAVE_PATH = 'D:\妹子图\\'


def get_request(url):
    res = requests.get(url, headers=HEADERS)
    print("正在请求 " + url)
    return res


def get_request_soup(url):
    html = get_request(url).text
    print("正在解析 ")
    return BeautifulSoup(html, 'lxml')


def get_girl_list(url):
    soup = get_request_soup(url)
    next_url = soup.find(class_='next page-numbers').get('href')
    girls = soup.find(class_='postlist').select('li')
    for girl in girls:
      url = girl.find('a').get('href')
      name = girl.find('span').find('a').string
      get_girl_group(url, 1, name)
    if not next_url == "":
      get_girl_list(next_url)


def get_girl_group(url, page, name):
    soup = get_request_soup(url + "/" + str(page))
    max_page = int(soup.find(class_='pagenavi').select('span')[-2].string)
    image = soup.find(class_='main-image').find('img').get('src')
    save_img(image, name, page)
    page += 1
    if page < max_page:
      get_girl_group(url, page, name)


# 存储妹子图片到本地
def save_img(url, file_name, page):
    file_path = SAVE_PATH + file_name
    image_path = file_path + "\\" + str(page) + ".jpg"
    print('检查文件是否存在 ' + image_path)
    if not os.path.exists(image_path):
      print("文件正在下载...")
      html = get_request(url).content
      print("下载成功")
      print("检查文件夹是否存在")
      exi = os.path.exists(file_path)
      if not exi:
            print("创建文件夹 " + file_name)
            os.makedirs(file_path)
      else:
            print("文件夹已存在 " + file_name)
      print("存入磁盘中...")
      f = open(image_path, 'wb')
      f.write(html)
      print("存放完成")
      f.close()
    else:
      print("文件已存在,无需重复下载" + image_path)


get_girl_list(MZITU)

伪。 发表于 2019-12-5 17:27:13

{:10_269:}

Zynismus 发表于 2019-12-13 21:13:25

File "E:/PythonFile/学习/xx.py", line 54
    image_path = file_path + "\" + str(page) + ".jpg"
                                                    ^
SyntaxError: EOL while scanning string literal

还有苹果 发表于 2020-1-10 15:24:22

请问下 File "E:/学习py资料/尝试搭建服务器/venv/爬图2.py", line 54
    image_path = file_path + "\" + str(page) + ".jpg"
                                                    ^
SyntaxError: EOL while scanning string literal这个是什么意思呢

还有苹果 发表于 2020-1-10 15:24:56

Zynismus 发表于 2019-12-13 21:13
File "E:/PythonFile/学习/xx.py", line 54
    image_path = file_path + "\" + str(page) + ".jpg"
...

我也是遇到这个问题了,你解决了吗?是要建文件夹吗????还是怎么做呢

学Python不开车 发表于 2020-2-15 09:57:29

本帖最后由 学Python不开车 于 2020-2-15 10:27 编辑

这个问题主要是 在于 储存路径的最后一位 不能是,反斜杠'\',如果是反斜杠就会报错, 即使用反斜杠转义也不行,所以要避免这种写法 ,可以将 SAVE_PATH 改成   SAVE_PATH = 'D://妹子图//'把54行的 "\"改成"/"

学Python不开车 发表于 2020-2-15 10:19:08

本帖最后由 学Python不开车 于 2020-2-15 10:27 编辑

还有苹果 发表于 2020-1-10 15:24
我也是遇到这个问题了,你解决了吗?是要建文件夹吗????还是怎么做呢


这个问题主要是 在于 储存路径的最后一位 不能是,反斜杠'\',如果是反斜杠就会报错, 即使用反斜杠转义也不行,所以要避免这种写法 ,可以将 SAVE_PATH 改成   SAVE_PATH = 'D://妹子图//'把54行的 "\"改成"/"

mcxx 发表于 2020-3-4 16:10:10

AttributeError: 'NoneType' object has no attribute 'select'

一套没下完就出现了这个错误。。。

lvjin250 发表于 2020-3-4 18:16:27

我正在再改进这个,然后测试时没设置爬取次数,现在给我封IP了,网站都打不开了{:5_90:}

livtsy 发表于 2020-3-11 13:52:32

D:\File\FILE\venv\Scripts\python.exe D:/File/FILE/pythonfile/pythonx/demo04.py
Traceback (most recent call last):
File "D:/File/FILE/pythonfile/pythonx/demo04.py", line 76, in <module>
    get_girl_list(MZITU)
File "D:/File/FILE/pythonfile/pythonx/demo04.py", line 30, in get_girl_list
    soup = get_request_soup(url)
File "D:/File/FILE/pythonfile/pythonx/demo04.py", line 26, in get_request_soup
    return BeautifulSoup(html, 'lxml')
File "D:\File\FILE\venv\lib\site-packages\bs4\__init__.py", line 225, in __init__
    raise FeatureNotFound(
bs4.FeatureNotFound: Couldn't find a tree builder with the features you requested: lxml. Do you need to install a parser library?
正在请求 https://www.mzitu.com
正在解析

Process finished with exit code 1
我的执行报这个错误什么问题

弱爆了 发表于 2020-3-11 16:41:46

好像跑不完

wumingcong 发表于 2020-3-18 17:31:17

AttributeError: 'NoneType' object has no attribute 'select'

Betterman. 发表于 2021-3-10 21:27:49

No module named 'requests'
这个是什么错误呢??

学c的sjj 发表于 2021-4-7 20:53:31

Betterman. 发表于 2021-3-10 21:27
No module named 'requests'
这个是什么错误呢??

你缺少这个库,去控制版面下呗
页: [1]
查看完整版本: 【简单爬虫】 爬取妹子图 自动下载 [改进]