专栏首页python学习教程Python老司机手把手带你写爬虫,整站下载妹子图,一次爽个够!

Python老司机手把手带你写爬虫,整站下载妹子图,一次爽个够!

今天就来带大家写一个简单而又完整的爬虫,我们来抓取整站的图片的,并且保存到电脑上!

准备工作

工具:Python3.6、pycharm

库:requests、re、time、random、os

目标网站:妹子图(具体url大家自己去代码里看。。。)

在写代码之前

在我们开始写代码之前,要先对网站进行分析,重点有这个几个地方:

1、先判断网页是否静态网页,这个关系我们采用的爬虫手段!

简单的说,网页中的内容,在网页源代码中都可以找到,那么就可以断定,这个网站是静态的了;如果没有找到,就需要去开发者工具中查找,看看是抓包呢还是分析js结构或者其他的方式。

2、看看网页的结构,大致清楚抓取目标数据,需要几层循环,每次循环的方式,以及是否保证没有遗漏!

3、根据网页源代码来决定采用的匹配方式

一般来说,正则表达式是处理字符串最快的方式,但是在爬虫中它的效率并不是很高,因为它需要遍历整个html来匹配相关内容,如果网页源代码比较规整的话,建议采用bs4或者xpath等等解析网页结构的方式比较好!

当然,今天我们是基础向的爬虫,就用正则表达式了,毕竟正则是必须掌握的内容!

那么,具体怎么写爬虫代码呢~?简单的举例给大家说下:

如果是手工操作的话,大概是这个流程

打开主页==>选择一个分类==>选择一个图集==>依次选择图片==>右键保存==>重复以上保存其他图片

那么这个过程放到代码中呢,它的结构大概是这样:

访问主页url==>找到并循环所有分类==>创建分类文件夹==>访问分类url==>找到页码构建循环分类所有页==>循环页面所有图集==>创建图集文件夹==>找到图集内所有图片url==>保存到对应文件夹

好了,思路也有了,那就废话不多说了,我们来写代码吧~!

完整代码和运行效果

在请求中加入了时间模块的暂停功能,不加入的话可能会被网页拒绝访问!

在最后请求图片地址的时候,需要加入UA来告诉服务器你是浏览器而不是脚本,这个是最常用的反爬手段了

#author:云飞
#QQ群542110741
import requests
import time
import random
import re
import os

def new_title(title):
    rstr = r"[\/\\\:\*\?\"\<\>\|]"  # '/ \ : * ? " < > |'
    new_title = re.sub(rstr, "_", title)  # 替换为下划线
    return new_title

url = 'http://www.meizitu.com/'
html = requests.get(url)
html.encoding = 'gb2312'
infos = re.findall(r'a href="(http://www.meizitu.com/.*?html)"  target="_blank" title="(.*?)" ',html.text)
i = 1
for sor_url,sor in infos:
    sor = new_title(sor)
    path = 'E://python/mn/meizitu/%s/'%sor#路径
    if os.path.exists(path):#判断路径及文件夹是否存在,不存在即创建
        pass
    else:
        os.mkdir(path)
    time.sleep(random.random())
    sor_html = requests.get(sor_url)
    sor_html.encoding = 'gb2312'
    atlas = set(re.findall(r"<li><a href='(.*?html)'>\d+</a></li>",sor_html.text))
    atlas_lis = []
    atlas_lis.append(sor_url)
    atlas_lis += [url+'a/'+x for x in list(atlas)]
    for atla in atlas_lis:
        atla_html = requests.get(atla).text
        at_url_lis = re.findall(r'h3 class="tit"><a href="(http://www.meizitu.com/.*?html)"  targe',atla_html)
        for at_url in at_url_lis:
            at_html = requests.get(at_url)
            at_html.encoding = "gb2312"
            atlas_title = ''.join(re.findall(r'<title>(.*?)</title>',at_html.text))
            atlas_title = new_title(atlas_title)
            img_path = 'E://python/mn/meizitu/%s/%s/'%(sor,atlas_title)
            if os.path.exists(img_path):#判断路径及文件夹是否存在,不存在即创建
                pass
            else:
                os.mkdir(img_path)
            img_urls = re.findall(r'src="(http://mm.chinasareview.com/.*?jpg)" /><br />',at_html.text)
            k = 1
            for img_url in img_urls:
                header = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:57.0) Gecko/20100101 Firefox/57.0'}
                data = requests.get(img_url,headers=header).content#获取图片的二进制格式
                with open('%s%s'%(img_path,img_url.split('/')[-1]),'wb') as f:
                    f.write(data)
                print("【正在下载】 {%s}的第%d张图片,一共下载了%d张图片"%(atlas_title,k,i))
                i += 1
                k += 1

下载一段时间后的效果

------------------- End -------------------

欢迎大家点赞,留言,转发,转载,感谢大家的相伴与支持

万水千山总是情,点个【在看】行不行

*声明:本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。

/今日留言主题/

随便说一两句吧~~

本文分享自微信公众号 - python教程(pythonjc),作者:小雨

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-08-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python爬虫基础教学(写给入门的新手)

    本文着重点在于教新手如何学习爬虫,并且会以外行人的思维进行形象地讲解。最近我一兄弟想学,我就想写个教学给他,然后想不如分享到网络上,给热爱学习的人们一起学习探讨...

    python学习教程
  • Python爬虫学习:python抓取4399上的炉石传说原画

    网站其实已经加载了所有的卡牌原画 只是之后的原画做了隐藏处理默认不展示 style=display

    python学习教程
  • python爬虫-python实现的抓取腾讯视频所有电影

    soup = BeautifulSoup(html) #过滤出分类内容

    python学习教程
  • 并查集

    本篇博客参照了如下博客内容: http://www.cnblogs.com/horizonice/p/3658176.html

    AI那点小事
  • SAP Spartacus storefrontapp不是运行在简单的tomcat服务器上

    在storefrontapp的src文件夹下,有index.html和index2.html:

    Jerry Wang
  • Laravel 跨域解决方案

    我们在用 laravel 进行开发的时候,特别是前后端完全分离的时候,由于前端项目运行在自己机器的指定端口 (也可能是其他人的机器) , 例如 localhos...

    双面人
  • Callback ——从同步思维切换到异步思维

    这是一种非常常见的直线性思维,我先请求网站拿到 html,然后我再把 html 传给负责处理的函数。在整个过程中,“我“担任着调度的角色。

    青南
  • 爬虫入门经典(八) | 使用xpath_爬取股吧

    giao!连续用了正则爬取了两个网站。博主表示是抗拒的。所以本次博主任性的选择了用xpath爬取股吧的相关信息。

    不温卜火
  • 【爆料】200张内部PPT揭开京东基础架构的秘密

    11月25日,由京东IT资源服务部联合京东CTO办公室、京东商城研发基础架构部共同举办的“京东技术——11.11基础架构峰会”,在国家会议中心盛大举办! 现场...

    京东技术
  • 高手过招:用SQL解决环环相扣的刑侦推理问题(罗海雄版本)

    本文是继 杨长老 刑侦高考:如何用SQL解决环环相扣的刑侦推理问题 之后,罗海雄老师提供了一个带注释的版本,希望初学者也能够直接看懂,不仅仅是Oracle的版...

    数据和云

扫码关注云+社区

领取腾讯云代金券