欢迎光临UUpython
最大、最新、最全的Python代码收集站

爬取性感小姐姐写真全套--2meinv

这段代码实现了多进程下载妹子图网站(https://www.2meinv.com/)的图片。使用了requestsgevent库来进行并发下载操作,多进程用于加速不同图片集的下载。代码主要涵盖以下几个部分:

  1. get_last_page: 从链接中提取页数。
  2. image_downLoad: 下载单张图片。
  3. img_req: 解析单个图片集的页面,获取图片链接和标题。
  4. 主程序部分:
  • save_path: 图片保存的目录。
  • startend: 图片集的起始和结束ID,表示需要下载哪些图片集的图片。
  • process_num: 每次启动的进程数。

主要逻辑如下:

  1. 循环下载图片集,每次启动 process_num 个进程。
  2. 每个进程调用 img_req 函数,解析图片集的每一页,并使用 gevent 并发下载图片。
  3. 各个进程会并行下载不同的图片集。

这段代码是一个多进程并发下载的示例,但在实际应用中需要注意合法使用爬虫,避免给网站服务器造成过大负担,以及遵守相关法律法规。此外,爬取网站的图片涉及版权问题,需要注意尊重版权。

加入了多进程和协程,提高了下载速度。同时具备了异常处理机制,出现错误不会中断程序.

import os
import re
import time
import multiprocessing
import gevent
from gevent import monkey
from lxml import etree
 
monkey.patch_all()
import requests
 
headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                  'Chrome/91.0.4472.114 Safari/537.36 Edg/91.0.864.59',
    'Referer': 'https://www.2meinv.com/'
}
 
 
def get_last_page(text):
    return int(re.findall('[^/$]\d*', re.split('/', text)[-1])[0])
 
 
def image_downLoad(img_url, img_save_path, img_name):
    try:
        img_file = img_save_path + img_name
        img_data = requests.get(url=img_url, headers=headers).content
        if not os.path.exists(img_save_path):
            os.makedirs(img_save_path)
        if not os.path.exists(img_file):
            with open(img_file, 'wb') as fp:
                fp.write(img_data)
                print(img_name, '图片下载成功!!!')
    except BaseException as e:
        print(img_url, '下载图片出错了!')
 
 
def img_req(urls, path):
    try:
        no = re.findall('[^-$][\d]', urls)[1] + re.findall('[^-$][\d]', urls)[2]
        res = requests.get(urls + ".html", headers=headers).content
        r_tree = etree.HTML(res)
        pages = r_tree.xpath('/html/body/div[2]/div/h1/span')[0].text
        last_page = get_last_page(pages)
    except BaseException as e:
        print(no, '出错了')
        return
    img_list = []
    for i in range(2, last_page + 1):
        try:
            next_url = urls + "-" + str(i) + ".html"
            print('开始解析:', next_url)
            time.sleep(1)
            _next = requests.get(next_url, headers=headers).content
            _next_html = etree.HTML(_next)
            img_url = _next_html.xpath('/html/body/div[5]/a/img/@src')[0]
            title = _next_html.xpath('/html/body/div[5]/a/img/@alt')[0]
            img_name = img_url.split("/")[-1]
            img_save_path = path + title + "/"
            img_list.append({'img_url': img_url, 'img_save_path': img_save_path, 'img_name': img_name})
        except BaseException as e:
            print(title, '图片地址解析出错了')
    g = []
    for im in img_list:
        g.append(gevent.spawn(image_downLoad, im['img_url'], im['img_save_path'], im['img_name']))
    gevent.joinall(g)
    print(no, '下载完成了!')
 
 
if __name__ == '__main__':
    save_path = "G:/spider/image/2meinv/"
    start = 5000
    end = 2000
    process_num = 10
    while start > end:
        process = []
        for i in range(start, (start - process_num) - 1, -1):
            urls = 'https://www.2meinv.com/article-' + str(i)
            m_p = multiprocessing.Process(target=img_req, args=(urls, save_path))
            m_p.start()
            process.append(m_p)
        for k in process:
            k.join()
        start -= process_num
赞(0) 打赏
未经允许不得转载:UUpython » 爬取性感小姐姐写真全套--2meinv
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!