导航

刚学python爬虫 写了一个爬mm照片的

2022-10-23
#21
来个生产者消费者模型,嘻嘻
import urllib
import threading
from bs4 import BeautifulSoup
import requests
import os
import time
import lxml

# 页面链接的初始化列表
page_links_list=['http://www.netbian.com/']
# 图片链接列表
img_links_list = []

#获取爬取的页数和页面链接
def GetUrls(page_links_list):
    pages = int(input('请输入你想爬取的页数:'))
    if pages > 1:
        for page in range(2, pages   1):
            url = 'http://www.netbian.com/index_'   str(page)   '.htm'
            page_links_list.append(url)
    else:
        page_links_list=page_links_list

#初始化锁,创建一把锁
gLock=threading.Lock()

#生产者,负责从每个页面中获取图片的链接
class Producer(threading.Thread):
    def run(self):
        while len(page_links_list)>0:
            #上锁
            gLock.acquire()
            #默认取出列表中的最后一个元素
            page_url=page_links_list.pop()
            #释放锁
            gLock.release()

            #获取img标签
            html = requests.get(page_url).content.decode('gbk')
            soup = BeautifulSoup(html, 'lxml')
            imgs = soup.select("div.list li a img")

            #加锁3
            gLock.acquire()
            for img in imgs:
                img_link = img['src']
                img_links_list.append(img_link)
            #释放锁
            gLock.release()
        #print(len(img_links_list))

#消费者,负责从获取的图片链接中下载图片
class Consumer(threading.Thread,):
    def run(self):
        print("%s is running"%threading.current_thread())
        while True:
            #print(len(img_links_list))
            #上锁
            gLock.acquire()
            if len(img_links_list)==0:
                #不管什么情况,都要释放锁
                gLock.release()
                continue
            else:
                img_url=img_links_list.pop()
                #print(img_links_list)
                gLock.release()
                filename=img_url.split('/')[-1]
                print('正在下载:', filename)
                path = './images/' filename
                urllib.request.urlretrieve(img_url, filename=path)
                if len(img_links_list)==0:
                    end=time.time()
                    print("消耗的时间为:", (end - start))
                    exit()


if __name__ == '__main__':
    GetUrls(page_links_list)
    os.mkdir('./images')
    start=time.time()
    # 5个生产者线程,去从页面中爬取图片链接
    for x in range(5):
        Producer().start()

    # 10个消费者线程,去从中提取下载链接,然后下载
    for x in range(10):
        Consumer().start()
2022-10-23
#22
彼岸图网都是4K的高清图,需要会员登录才能下载,你爬人家一堆预览图有个der用啊。。。。。。
2022-10-23
#23
想当年,这也是我仅有不多的学习的一个理由
2022-10-24
#24
太基础了,自己写出来做笔记记录学习就好了,没啥分享价值
你的现在是我回不去的曾经
2022-10-24
#25
可以,确实很水。。。
2022-10-24
#26
已搬,  都不属于黄蛇图片。白激动了。
Access        denied
Permission  denied
2022-10-25
#27
哈哈哈,爬虫可以
2022-10-28
#28
楼主把网站换下,照片换下就没事了,换什么你懂的
天道酬勤

2022-11-10
#29
哈哈哈我也写过
2022-11-10
#30
新手练习程序,我觉得发水区里没有问题啊