Python使用BeautifulSoup简单实现爬取妹子mm图片--初级篇

先来个效果截图(屈服在我的淫威之下吧!坏坏...嘿0.0)

因为是简易版而且是自己写着玩玩而已,自己也刚学,亦是笔记亦是分享,大佬轻喷就好。主要目的是希望更多人能够体验爬取一些seqing图片的 快乐  ??哈哈


完整代码:文末已贴出

应该安装个bs4的包就可以直接用了!代码有详细注释的,推荐直接看代码,后文是浅薄的讲解...

↑加包方法

 

 


简单逐步地讲一下是怎么实现的吧(有点像期末答辩的赶脚...不管了装逼要紧!)

简单式爬取一个网站信息的步骤一般是:

1. 确定一个目标网址targetURL >> 2.分析该网站的HTML代码(借助开发者工具查看源码;360IE快捷键是Ctrl+shift+c,其他浏览器进入F12开发者工具应该可见) >> 3. 使用BeautifulSoup获取想要内容 >> 4.保存数据   >> ...

本例targetURL

     http://www.mmonly.cc/mmtp/qcmn/237269.html

分析HTML

  • 目标网站编码格式是gb2312到时候解码需要稍微注意
  •   

 

  • 一些关键标识符(红框标出)帮助我们准确找到要使用的信息

 

分析得知:

    该网站HTML代码,我们知道了每一张大图本身就是被a 链接标签包围的,而大图的src属性就是该图片的下载地址。

那么:

     通过获得<a>标签中的href属性我们可以找到下一个网页,继续爬取图片

     通过获得<img>属性中的src属性,我们可以将大图下载并保存在本地。

 

使用BeautifulSoup获取想要内容

   关于beautifulsoup的语法,这里不介绍了,特别推荐的是这一篇文章(https://cuiqingcai.com/1319.html/comment-page-1#comments),我觉得写得通俗易懂,很实用。

   用本例中的代码来大致说明一下基本步骤与使用:

#1.导包

    from bs4 import BeautifulSoup

#2.新建对象,第一个参数HTML源代码,第二个参数是解析器类别
    soup = BeautifulSoup(html, 'html.parser')

#3.查找  ,
     Divs = soup.find_all('div',attrs={'id':'big-pic' })#从soup对象中,查找 'id'='big-pic'  的div 标签 , 返回值是Tag类型

     picLink = (div.find('a').find('img')['src'])#查找div中的a标签中的img标签中的src属性 ,  返回值是str

本例我们最想要的就是picLink了(图片下载地址),有了picLink,我们就可以利用它下载并保存图片放置本地了。

 

保存数据

   上一步已经获取了想要的下载链接,最后一步就是下载保存了。如下

运行效果:

 


本例完整代码:

import urllib.request
from bs4 import BeautifulSoup
import os

def Download(url,picAlt,name):
    path = 'D:\\pythonDemo____________爬虫____________\\'+picAlt+'\\'
    if not os.path.exists(path):#判断系统是否存在该路径,不存在则创建
        os.makedirs(path)
    urllib.request.urlretrieve( url, '{0}{1}.jpg'.format(path, name))  # ,下载图片保存在本地

header = {
    "User-Agent":'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36',

    'Accept': '*/*',
    'Accept-Language': 'en-US,en;q=0.8',
    'Cache-Control': 'max-age=0',
    'Connection': 'keep-alive'
    """
        用户代理(User-Agent):用于伪装程序不是爬虫,让服务器以为你是一个正常用户。
            是一种向访问网站提供你所使用的浏览器类型、操作系统及版本、CPU 类型、浏览器渲染引擎、浏览器语言、浏览器插件等信息的标识。
            UA字符串在每次浏览器 HTTP 请求时发送到服务器
    """
}
def run(targetUrl, beginNUM ,endNUM):
    req = urllib.request.Request(url=targetUrl,headers=header)
    response = urllib.request.urlopen(req)#这里的req可看成一种更为高级的URL
    html = response.read().decode('gb2312','ignore')#解码 得到这个网页的html源代码:这个网站的编码使用的是GB2312格式,更常见的网站编码格式应该是UTF-8了吧
    soup = BeautifulSoup(html, 'html.parser')#将得到的HTML代码使用python自带的解析器(也可以使用lxml解析器,性能会更好,本代码从简
    Divs = soup.find_all('div',attrs={'id':'big-pic' })#使得条件唯一,找到我们想要下载的目标。这里语法是bs,主流的解析搜索方式有:bs,xpath和正则 ,小白还是用bs吧
    nowpage = soup.find('span',attrs={'class':'nowpage'}).get_text()#获取当前页码
    totalpage= soup.find('span',attrs={'class':'totalpage'}).get_text()#获取所有页
    if beginNUM ==endNUM :#跳出条件
        return
    for div in Divs:#遍历所有大图所在的div,其实只有一个元素。因为前面使用的是find_all()方法得到的是集合,所以这要遍历了。有点不太实用 因为与照顾到语法使用全面的意思
        beginNUM = beginNUM+1

        if div.find("a") is None :#如果这张图片没有下一张图片的链接
            print("没有下一张了")
            return
        elif div.find("a")['href'] is None or div.find("a")['href']=="":#有链接,但是是 空链接
            print("没有下一张了None")
            return
        print("=====================================================下载信息:总进度:",beginNUM,"/",endNUM," ,正在下载套图:(",nowpage,"/",totalpage,")====================================")

        if int(nowpage)<int(totalpage):#nowpage,totalpage是str类型;(如果不转换成int来比较的话,totalPage是字符串“12”无法与‘1’‘2’这些单个字符的字符串比较)
            nextPageLink ="http://www.mmonly.cc/mmtp/qcmn/" +(div.find('a')['href'])
        elif int(nowpage)==int(totalpage):
            nextPageLink = (div.find('a')['href'])

        picLink = (div.find('a').find('img')['src'])#本网站大图的SRC属性是下一张图片的链接
        picAlt = (div.find('a').find('img'))['alt']#图片的名字alt属性
        print('下载的图片链接:',picLink)
        print('套图名:[ ', picAlt , ' ] ')
        print('开始下载...........')
        Download(picLink,picAlt, nowpage)
        print("下载成功!")
        print('下一页链接:',nextPageLink)
        run(nextPageLink,beginNUM ,endNUM)#递归
        return

#################################main 函数########################################
if __name__ == '__main__':
    #可以是这个网站(http://www.mmonly.cc/mmtp/qcmn/)下的任意一个网址(如下)开始爬取,means爬取的起点()
    # targetUrl ="http://www.mmonly.cc/mmtp/qcmn/258345_2.html"
    # targetUrl ="http://www.mmonly.cc/mmtp/qcmn/259676_8.html"
    targetUrl ="http://www.mmonly.cc/mmtp/qcmn/237269.html"
    run(targetUrl,beginNUM=0,endNUM=60)#设置下载图片数量:endNUM-beginNUM 数字相减为总数量
    print("【【【【       OVER!        】】】】】")
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值