对Python爬虫编写者充满诱惑的网站,《可爱图片网》,瞧人这网站名字起的

Python爬虫120 专栏收录该内容
15 篇文章 88 订阅

这网站名字绝了,当擦哥看到的那一瞬间,我估计他就准备好爬虫代码了。

Python 爬虫 120 例,已完成文章清单

  1. 10 行代码集 2000 张美女图,Python 爬虫 120 例,再上征途
  2. 通过 Python 爬虫,发现 60%女装大佬游走在 cosplay 领域
  3. Python 千猫图,简单技术满足你的收集控
  4. 熊孩子说“你没看过奥特曼”,赶紧用 Python 学习一下,没想到
  5. 技术圈的【多肉小达人】,一篇文章你就能做到
  6. 我用 Python 连夜离线了 100G 图片,只为了防止网站被消失

可爱图片网双线程爬取

这篇博客要对 Python 爬虫进行提速了,实现双线程爬虫。而且在爬取过程中,还有意外收货。

爬取目标分析

爬取目标

  • 可爱图片网 https://www.keaitupian.net/
  • 图片分类非常丰富,想要抓取的都有,例如 可爱女生,性感美女,不过为了更好的学习技术,我决定只抓卡通动漫分类图片,其它的留给各位大佬读者了。

对Python爬虫编写者充满诱惑的网站,《可爱图片网》,瞧人这网站名字起的

使用的 Python 模块

  • 本次使用 requestsrethreading
  • 新增加线程并行模块 threading

重点学习内容

  1. 爬虫基本套路;
  2. 不确定页码数据爬取;
  3. 固定线程数爬虫。

列表页与详情页分析

  • 列表页抓取卡通动漫图片,故列表页为 https://www.keaitupian.net/dongman/,点击多个页码,可得到如下规则:
  • https://www.keaitupian.net/dongman/list-1.html
  • https://www.keaitupian.net/dongman/list-2.html
  • https://www.keaitupian.net/dongman/list-{不定页码}.html

由于列表总页数无法直接获取到,顾使用大数测试,当输入 https://www.keaitupian.net/dongman/list-110.html 时,页面展示为不存在,如下图所示。

对Python爬虫编写者充满诱惑的网站,《可爱图片网》,瞧人这网站名字起的

实际测试之后,得到该分类下列表页存在 77 页。

点击任意图片详情页,查看图片页具体内容,发现详情页也存在翻页,而且该翻页可以在列表页之间跳转,例如下图翻页到 9/9 之后,可进入到下一套图中。因此可以直接针对详情页进行数据抓取。

对Python爬虫编写者充满诱惑的网站,《可爱图片网》,瞧人这网站名字起的
获取列表第 77 页最后一组照片,查看最后一组照片翻页数据代码,发现最后向右侧翻页代码为空,即无法翻页。

对Python爬虫编写者充满诱惑的网站,《可爱图片网》,瞧人这网站名字起的
最后一页数据查看:https://www.keaitupian.net/article/280-8.html#

目标网站分析完毕,梳理整体逻辑,出需求。

整理需求逻辑

  1. 随机选择一详情页地址,作为爬虫起始页面;
  2. 一线程保存图片;
  3. 一线程保存下一页地址。

编码时间

抓取目标请求地址

基于上述需求,首先实现循环获取 URL 的线程,该线程主要用于反复爬取 URL 地址,保存至一全局列表中。

需要使用到 threading.Thread 创建线程与启动线程,同时为保证线程之间的数据传递,需要用到线程互斥锁。

锁的声明:

mutex = threading.Lock()

锁的使用:

global urls
# 上锁
mutex.acquire()

urls.append(next_url)
mutex.release()

编写 URL 获取地址代码如下:

import requests
import re
import threading
import time

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36"}

# 全局 urls
urls = []

mutex = threading.Lock()


# 循环获取URL
def get_image(start_url):
    global urls
    urls.append(start_url)
    next_url = start_url
    while next_url != "#":
        res = requests.get(url=next_url, headers=headers)

        if res is not None:
            html = res.text
            pattern = re.compile('<a class="next_main_img" href="(.*?)">')
            match = pattern.search(html)
            if match:
                next_url = match.group(1)
                if next_url.find('www.keaitupian') < 0:
                    next_url = f"https://www.keaitupian.net{next_url}"
                print(next_url)
                # 上锁
                mutex.acquire()

                urls.append(next_url)
                # 释放锁
                mutex.release()


if __name__ == '__main__':
    # 获取图片线程
    gets = threading.Thread(target=get_image, args=(
        "https://www.keaitupian.net/article/202389.html",))
    gets.start()

运行代码,得到待抓取的目标地址,控制台输出如下内容:

对Python爬虫编写者充满诱惑的网站,《可爱图片网》,瞧人这网站名字起的
提取目标地址图片

下面即为最后一个步骤,通过上述代码抓取到的链接地址,提取图片地址,并保存图片。

保存图片也为一个线程,该线程对应的 save_image 函数如下:

# 保存图片线程
def save_image():
    global urls
    print(urls)

    while True:
     	# 上锁
        mutex.acquire()
        if len(urls) > 0:
        	# 获取列表第一项
            img_url = urls[0]
            # 删除列表第一项
            del urls[0]
            # 释放锁
            mutex.release()
            res = requests.get(url=img_url, headers=headers)

            if res is not None:
                html = res.text

                pattern = re.compile(
                    '<img class="img-responsive center-block" src="(.*?)"/>')

                img_match = pattern.search(html)

                if img_match:
                    img_data_url = img_match.group(1)
                    print("抓取图片中:", img_data_url)
                    try:
                        res = requests.get(img_data_url)
                        with open(f"images/{time.time()}.png", "wb+") as f:
                            f.write(res.content)
                    except Exception as e:
                        print(e)
        else:
            print("等待中,长时间等待,可以直接关闭")

同步在主函数中增加基于该函数的线程,并启动:

if __name__ == '__main__':
    # 获取图片线程
    gets = threading.Thread(target=get_image, args=(
        "https://www.keaitupian.net/article/202389.html",))
    gets.start()

    save = threading.Thread(target=save_image)
    save.start()

完整代码下载地址:https://codechina.csdn.net/hihell/python120,NO7。

代码编写过程中,顺手爬取了一堆图片,可以提前预览一波,看看图,在决定是否运行这段代码。

https://download.csdn.net/download/hihell/19759050

对Python爬虫编写者充满诱惑的网站,《可爱图片网》,瞧人这网站名字起的

抽奖时间

上一篇文章 《我用Python连夜离线了100G图片,只为了防止网站被消失》 评论数没有达到 100,但是出现了一个热评大佬 幻想家37927,这不得不送一份一折券了,抓紧联系橡皮擦哦~。

对Python爬虫编写者充满诱惑的网站,《可爱图片网》,瞧人这网站名字起的

只要评论数过 100
随机抽取一名幸运读者
奖励 29.9 元《Python 游戏世界》 1 折购买券一份,只需 2.99 元

今天是持续写作的第 167 / 200 天。可以点赞、评论、收藏啦。

<p> <span> </span> </p> <h3 class="ql-long-26664262"> <p style="font-size:13pt;"> <span> </span> </p> <div class="ql-long-26664262"> <span style="color:#337FE5;font-size:14px;">【为什么学Python】</span> </div> <p> <span><span style="font-weight:400;"><strong></strong></span></span> </p> <p style="font-size:13pt;"> <span style="color:#494949;font-weight:normal;font-size:14px;">Python 是当今非常热门语言之一,2020年 TIOBE 编程语言排行榜中 ,Python名列第一,并且其流行度依然处在上升势头。</span> </p> </h3> <p> <img alt="" src="https://img-bss.csdnimg.cn/202006020826291344.png" /><span style="font-size:14px;"></span> </p> <p> <span style="color:#494949;font-size:14px;">在2015年时候,在网上还经常看到学Python还是学R讨论,那时候老齐就选择了Python,并且开始着手出版跟老齐学Python。时至今日,已经无需争论。Python给我们带来,不仅仅是项目上收益,我们更可以从它“开放、简洁”哲学观念中得到技术发展路线启示。</span> </p> <p> <br /> </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> <span style="font-size:14px;">借此机会,老齐联合CSDN推出了本课程,希望能影响更多走进Python,踏入编程大门。</span> </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> <span style="font-size:14px;"><br /> </span> </p> <p> <span> </span> </p> <h3 class="ql-long-26664262"> <p> <span style="color:#337FE5;"><span style="font-size:14px;color:#337FE5;">【课程设计】</span></span> </p> <p style="font-size:12pt;"> <span style="font-size:14px;color:#494949;font-weight:normal;"><br /> </span> </p> <p style="font-size:12pt;"> <span style="font-size:14px;color:#494949;font-weight:normal;">本课程共包含三大模块:</span> </p> </h3> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> <strong class="ql-author-26664262 ql-size-12"><span style="color:#000000;font-size:14px;"><br /> </span></strong> </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> <strong class="ql-author-26664262 ql-size-12"><span style="color:#000000;font-size:14px;">一、基础知识篇</span></strong> </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> <span style="font-size:14px;">内置象和基本运算、语句,是Python语言基础。本课程在讲解部分知识时候,不是简单地将各种知识做简单堆砌,而是在兼顾内容全面性同时,更重视向学习者讲授掌握有关知识方法,比如引导学习者如何排查错误、如何查看和理解文档等。</span> </p> <p style="font-size:11pt;color:#494949;"> <span style="font-size:14px;"> </span> </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> <strong class="ql-author-26664262 ql-size-12"><span style="color:#000000;font-size:14px;">二、面向象篇</span></strong> </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> <span style="font-size:14px;">“面向象(OOP)”是目前企业开发主流开发方式,本课程从一开始就渗透种思想,并且在“函数”和“类”学习中强化面向象开发方式学习——是本课程与一般课程重要区别,一般课程只在“类”里才提到“象”,会导致学习者茫然失措,并生畏惧,乃至于放弃学习。本课程则是从开始以“润物细无声”方式,渗透象概念,等学习到本部分时候,OOP学习者而言有一种“水到渠成”感觉。</span> </p> <p style="font-size:11pt;color:#494949;"> <span style="font-size:14px;"> </span> </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> <strong class="ql-author-26664262 ql-size-12"><span style="color:#000000;font-size:14px;">三、工具实战篇</span></strong> </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> <span style="font-size:14px;">在项目实战中,除了前述知识之外,还会用到很多其他工具,至于那些工具如何安装?怎么自己做工具?有那些典型工具?都是部分内容。具体来说,就是要在部分介绍Python标准库应用以及第三方包安装,还有如何开发和发布自己工具包。此外,很多学习Python同学,未来要么从事数据科学、要么从事Web开发,不论哪个方向,都离不开数据库操作,本部分还会从实战角度,介绍如何用Python语言操作常用数据库。</span> </p> <p> <br /> </p> <p class="16" style="margin-left:21pt;text-indent:0pt;"> <span style="color:#E53333;"></span> </p>
<div> </div> <p> <span></span><span style="font-size:33.5px;color:#E30000;">1、轻松上手,高薪就业不用愁  </span> </p> <p> <span style="font-size:33.5px;color:#41AD1C;">2、花钱一次,永久白嫖</span> </p> <p> <span style="font-size:33.5px;color:#DE5700;">3、基础知识、核心技术、高级应用、项目实战  </span> </p> <p> <span style="font-size:33.5px;color:#4F009A;">4、适合编程爱好者、程序员、零基础自学者</span> </p> <p> <span style="font-size:33.5px;"><span>5、Python数据分析、爬虫、职业自动化技能</span></span> </p> <p> <span style="font-size:33.5px;color:#E500FF;">6、千行工具类、非常给力、开箱即可运行</span> </p> <p> <br /></p> <p> <br /></p> <p> <span style="color:#4F009A;font-size:33.5px;"><strong>项目:</strong></span> </p> <p> <br /></p> <p> <span style="font-size:33.5px;">19大报告分词、词频统计并生成漂亮词云图片</span> </p> <p> <span style="font-size:33.5px;">统计商品销售信息生成可视化报表</span> </p> <p> <span style="font-size:33.5px;">通过同乐学堂api爬取博客数据</span> </p> <p> <span style="font-size:33.5px;">爬取哔哩哔哩短视频</span> </p> <p> <span style="font-size:33.5px;">爬取娱乐网站美女图片</span> </p> <p> <span style="font-size:33.5px;">爬取金融网站股票信息</span> </p> <p> <span style="font-size:33.5px;"><span style="font-size:33.5px;">某大型平台租赁数据建模分析 </span><br /></span> </p> <p> <span><span style="font-size:33.5px;">大型商场销售数据分析和统计</span></span> </p> <p> <span><span style="font-size:33.5px;">IMDB电影排名原因多维度分析</span></span> </p> <p> <span><span style="font-size:33.5px;">利用百度AI平台处理图片分类</span></span> </p> <p> <span><span style="font-size:33.5px;"><span style="font-size:33.5px;">利用百度AI平台进行语音识别,合成、分析</span><br /></span></span> </p> <p> <span><span style="font-size:33.5px;"><span style="font-size:33.5px;"><span style="font-size:33.5px;">利用百度AI平台进行身份证信息读取 录入Excel</span></span></span></span> </p> <p> <span><span style="font-size:33.5px;"><span style="font-size:33.5px;">实现日常文件办公各种类型文件批量处理</span></span></span> </p> <p> <span><span style="font-size:33.5px;"><span style="font-size:33.5px;">通过Appium、Selenium自动化技术,自动刷抖音点赞评论、控制百度搜索行为,自动刷bilibili视频等等</span></span></span> </p> <p> <br /></p> <p> <br /></p> <p> <span><span style="font-size:33.5px;"><span style="color:#DE5700;font-size:33.5px;">部分工具类展示</span>:</span></span> </p> <p style="color:#000000;font-size:12px;"> <span style="color:#000000;font-size:24px;"><img src="https://img-bss.csdn.net/202003200345026438.png" alt="" /><br /></span> </p> <p> <br /></p> <p> <span style="font-size:24px;"><br /></span> </p> <p> <span style="font-size:24px;"><br /></span> </p>
相关推荐
<p> <span style="font-size:14px;color:#337FE5;">【为什么学爬虫?】</span> </p> <p> <span style="font-size:14px;">       1、爬虫入手容易,但是深入较难,如何写出高效率爬虫,如何写出灵活性高可扩展爬虫都是一项技术活。另外在爬虫过程中,经常容易遇到被反爬虫,比如字体反爬、IP识别、验证码等,如何层层攻克难点拿到想要数据,门课程,你都能学到!</span> </p> <p> <span style="font-size:14px;">       2、如果是作为一个其他行业开发者,比如app开发,web开发,学习爬虫能让你加强技术认知,能够开发出更加安全软件和网站</span> </p> <p> <br /> </p> <span style="font-size:14px;color:#337FE5;">【课程设计】</span> <p class="ql-long-10663260"> <span> </span> </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> 一个完整爬虫程序,无论大小,总体来说可以分成三个步骤,分别是: </p> <ol> <li class="" style="font-size:11pt;color:#494949;"> 网络请求:模拟浏览器行为从网上抓取数据。 </li> <li class="" style="font-size:11pt;color:#494949;"> 数据解析:将请求下来数据进行过滤,提取我们想要数据。 </li> <li class="" style="font-size:11pt;color:#494949;"> 数据存储:将提取到数据存储到硬盘或者内存中。比如用mysql数据库或者redis等。 </li> </ol> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> 那么本课程也是按照几个步骤循序渐进进行讲解,带领学生完整掌握每个步骤技术。另外,因为爬虫多样性,在爬取过程中可能会发生被反爬、效率低下等。因此我们又增加了两个章节用来提高爬虫程序灵活性,分别是: </p> <ol> <li class="" style="font-size:11pt;color:#494949;"> 爬虫进阶:包括IP代理,多线程爬虫,图形验证码识别、JS加密解密、动态网页爬虫、字体反爬识别等。 </li> <li class="" style="font-size:11pt;color:#494949;"> Scrapy和分布式爬虫:Scrapy框架、Scrapy-redis组件、分布式爬虫等。 </li> </ol> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> 通过爬虫进阶知识点我们能应付大量反爬网站,而Scrapy框架作为一个专业爬虫框架,使用他可以快速提高我们编写爬虫程序效率和速度。另外如果一台机器不能满足你需求,我们可以用分布式爬虫让多台机器帮助你快速爬取数据。 </p> <p style="font-size:11pt;color:#494949;">   </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> 从基础爬虫到商业化应用爬虫,本套课程满足您所有需求! </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> <br /> </p> <p> <br /> </p> <p> <span style="font-size:14px;background-color:#FFFFFF;color:#337FE5;">【课程服务】</span> </p> <p> <span style="font-size:14px;">专属付费社群+定期答疑</span> </p> <p> <br /> </p> <p class="ql-long-24357476"> <span style="font-size:16px;"><br /> </span> </p> <p> <br /> </p> <p class="ql-long-24357476"> <span style="font-size:16px;"></span> </p>
©️2020 CSDN 皮肤主题: 博客之星2020 设计师:CY__ 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值