用python爬虫爬取海量高清美女图片,亲测2021年12月20日可用,适合初学者

因为近期在自学python,想着先通过一些项目提升对这个编程语言的兴趣,而且爬虫也是python中对基本功要求较低的项目,就根据所学内容编写了一个爬虫项目爬取某网站的图片。温馨提示:爬虫学得好,牢饭吃到饱,学习爬虫第一课应该去了解一下相应的法律法规,避免出现一些小差错。

新建项目

本人使用的是pycharm社区版,具体下载安装等一系列方法随便搜一下就有很多,这里就不再赘述。创建本项目的虚拟环境(这个是有必要的,防止多个项目之间产生重叠进而产生一系列搞不懂的问题)。点击file->new project,出现下面界面。

这里可以修改你所创建的项目的存放地址(通过点击后面文件夹的标识修改),蓝色的部分就是你所创建的项目的名字,这里我改成fetch_image,注意项目名不要出现中文,下方的内容是项目的解释器,默认不管。点击create

新建python文件

项目创建后,右键点击左上方你所创建的文件,弹出的选择框中选择new->python file,创建本脚本文件的名字,我设置的是1.py(注意这里文件的后缀名一定要是.py)。

可以看到在project下面多了一个刚才创建的1.py文件,接下来你就可以在右侧书写你的python代码啦。

导入本项目相关的依赖包

import requests
#from lxml import etree
from bs4 import BeautifulSoup
import time
from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor

 本项目是利用beautifulsoup包实现图片连接的定位,具体的使用方法这里也不细讲。request是爬虫基本都需要的一个依赖包,可以通过它来得到链接的scripts内容,由于要下载的图片较多,所以采用多线程和线程池来最大化的利用cpu资源。

相应准备工作

本次要爬取的是彼岸图网的图片,先放一张页面压压惊。

选择用Microsoft edge浏览器输入网址打开,在本网站页面的空白处鼠标右键点击检查。

出现上示页面后点击网络,然后将页面刷新,点击出现的4kmeinv/,在标头里面可以看出请求方法是get,URL,cookie,和ueragent。将源相应的内容换成你自己按照此方法得出的即可。

代码如下:

headers ={
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36 Edg/95.0.1020.44",
        "referer": "https://pic.netbian.com/4kmeinv/index.html",
        "cookie": "__yjs_duid=1_c427763b6a77b795723fe580805d86f41635746735356; Hm_lvt_14b14198b6e26157b7eba06b390ab763=1635749214,1636550738,1636550843; zkhanecookieclassrecord=%2C54%2C; Hm_lvt_526caf4e20c21f06a4e9209712d6a20e=1635746736,1636550853,1636557267,1636606416; Hm_lpvt_526caf4e20c21f06a4e9209712d6a20e=1636606416; yjs_js_security_passport=d0fe81024fb5a59de630df3fb7dd52134fe3a84c_1636606550_js"

    }

 得到网页上图片的原图

如果有过一些爬虫基础的小伙伴肯定知道,在网页上右键选择检查页面源代码可以得到网页上相应图片的URL,不过一定要注意,这些URL对应的都是缩略图,分辨率和大小一言难尽,为了更好的欣赏,肯定是希望爬取得到的是原图对吧。所以此时随便选择一张图片点击进入下一个页面,再右键选择检查页面源代码,可以得到如下HTML页面。

往下翻,找到后缀名是.jpg的链接,一个个点进去试试,最后一定可以找到本子网页上所示的原图,而且可以看出,在JavaScript里面的URL放在a标签下面的image标签内的src内容。此时点击就可以得到原图。不过一定要注意,这个src如果直接粘贴放到网页上的话是会出现404的,因为我们少了一个很重要的内容也就是前面网络内的referer,只有将两个链接拼接到一起时才会出现内容。这个在代码中会有体现的。

 

有小伙伴可能就会问了,既然这样就可以得到原图,何必大费周章,不过你要理解爬虫爬出来的可是许多图片喔。而且还是很多子页面里面的图片,这么简单高效,还不尝试一下。

最后附上源码,直接粘贴即可使用

import requests
#from lxml import etree
from bs4 import BeautifulSoup
import time
from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor

def dl_page(url):
    res = requests.get(url,headers = headers,proxies = proxies)
    res.encoding = "gbk"
    #html = etree.HTML(res.text)    #
    #table = html.xpath("//*[@id="main"]/div[3]/ul/li[1]")[0]
    #trs = table.xpath("./tr[position()>1]")
    main_page = BeautifulSoup(res.text,"html.parser")
    main_url = main_page.find("ul",attrs={"class":"clearfix"})
    alist = main_url.find_all("a")
    #print(len(alist))
    #print(alist)
    url_ = "https://pic.netbian.com"
    for a in alist:
        href = a.get("href")
        url_real = url_+href
        resp = requests.get(url_real, headers=headers,proxies = proxies)
        resp.encoding = "gbk"
        child_page = BeautifulSoup(resp.text, "html.parser")
        img_page = child_page.find("a", attrs={"id": "img"})
        img = img_page.find("img")
        src = img.get("src")
        src_real = url_+src
        img_res = requests.get(src_real)

        img_name = src.split("/")[-1]  # 拿到最后一个杠后面的内容
        with open("img/" + img_name, mode="wb") as f:
            f.write(img_res.content)  # 括号内内容为字节,不能打印
        print("over", img_name)
        time.sleep(10)
    print ("提取完毕")
#
if __name__ == '__main__':

    headers ={
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36 Edg/95.0.1020.44",
        "referer": "https://pic.netbian.com/4kmeinv/index.html",
        "cookie": "__yjs_duid=1_c427763b6a77b795723fe580805d86f41635746735356; Hm_lvt_14b14198b6e26157b7eba06b390ab763=1635749214,1636550738,1636550843; zkhanecookieclassrecord=%2C54%2C; Hm_lvt_526caf4e20c21f06a4e9209712d6a20e=1635746736,1636550853,1636557267,1636606416; Hm_lpvt_526caf4e20c21f06a4e9209712d6a20e=1636606416; yjs_js_security_passport=d0fe81024fb5a59de630df3fb7dd52134fe3a84c_1636606550_js"

    }
    proxies = {
        "http": "http://113.125.156.47:8888"
    }
    url = "https://pic.netbian.com/4kmeinv/index.html"
    dl_page(url)
#     # for i in range(2,148):#此效率会极其低下
#     #     dl_page(f"https://pic.netbian.com/4kmeinv/index_{i}.html")
    with ThreadPoolExecutor(10) as t:
        for i in range(2,30):
            t.submit(dl_page,f"https://pic.netbian.com/4kmeinv/index_{i}.html")

    print("全部下载完毕!!!")

 关于代码的相关内容

1:有小伙伴直接粘贴后会在前面导入库的时候出现红色波浪线,这时直接鼠标光标移到此位置,在出现的框中点击install packege xxx,等待一会就自动安装好啦。安装好后此处不会出现红色波浪线喔。

2:代码中我适用了一个代理IP(因为我是新手,所以怕毛手毛脚下手太重网站给我IP封了)

3:源码中ThreadPoolExecutor后面的内容可以修改,这个内容就是同时工作的线程个数,合理增加会加快爬取速度,考虑到自己CPU的处理能力,不要一味增加。

4:for i in range(2,30),后面的30可以修改,意思是你所爬取的页面,最多只有136多好像,因为原网页也就只有这么多子网页了。不建议太大,免得IP被封了。

5:我在代码中设置了一个time.sleep(10),意思是下载完一张图片后10秒才会下载第二张(不要骂了别骂了,也是怕速度太快被反爬)

成果展示

在代码全部执行完毕后,在project下面会出现代码中新建的文件夹img,里面的就是爬取的成果啦,展示一下我的。

 有没有很心动呢?不过一定要注意爬取的图片不要进行商用,自己保存就好啦。最后一步也很关键,右键点击生成的文件夹img,找到Mark directory as->excluded,这个步骤的作用是防止pycharm为生成的文件夹建立索引,这样日复一日pycharm使用起来会越来越卡。

到这里第一个爬虫程序创建完成啦。需要源码的评论区评论哟。

 

 

 

 

 

  • 3
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值