利用Python爬取妹子图

作者: 昵称都被娶完了 | 来源:发表于2019-05-08 22:12 被阅读99次

    ** 在生活和工作中,有时候需要在网络上获取大量信息,可是采用复制+黏贴的方式却带来,工作量大和信息采集不彻底等情况,今天介绍一种省时省力,并且可以快速获取信息的方法--爬虫**

    一.爬取前分析

    1.要想爬取网站,首先要分析妹子图的请求方式,看看它以什么方式渲染。这里妹子图只是利用了传统的网页(没有使用Ajax或js)

    2.接着点击进入首页,发现一共有218页,然后每页的组图都有一个编号:183651,178973……

    218.png image image

    3.然后点击进入页面,连续点击下一页,发现url存在一定规律,如图,url最2,3…依次递增

    image image

    ※通过分析,要想抓取图片,首先获取所有组图的编号,然后在每个组图后面添加该组的数量,就可以抓取全部图片了,下面我们就开始编写代码

    .代码部分

    1.导入所需的库,并构造218页的网址

    '''
    import requests
    import bs4
    from bs4 import BeautifulSoup
    import os
    import time

    start = time.time()
    os.chdir('D:/Python/SPADER/')
    #设置默认路径
    headers = {
    'Referer':'https://www.mzitu.com/',
    'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36'
    }
    #设置头部,防止反爬

    def get_url():
    for i in range(1,219):
    yield 'https://www.mzitu.com/page/{}/'.format(i)
    #构造218页的每个网页网址
    '''

    2.创建一个列表,存储所有组图的的编号,并构造链接

    '''
    def get_html(url):
    try:
    r = requests.get(url,headers=headers)
    r.enconding = r.apparent_encoding
    return r
    except Exception as err:
    print(err)
    #创建函数获取HTML函数

    imgs=[]
    def get_href(url):
    res = get_html(url)
    soup = BeautifulSoup(res.text,'html.parser')
    a = soup.select('div.postlist ul#pins li a')
    for i in a:
    if i['href'] not in imgs:
    imgs.append(i['href'])
    else:
    continue

    for j in get_url():
    get_href(j)
    #将所有的url存入imgs
    '''


    imgs.png

    #从图片上可以看到,我们已经构造了5225个组图的url,之后通过循环遍历,我们就可以抓取5225组照片,大约30万张照片

    3.通过构建的网址,逐一爬取照片并存储到文件夹中

    '''
    for img in imgs[:100]:
    res = get_html(img).text
    soup = BeautifulSoup(res,'html.parser')
    count = soup.select('div.content div.pagenavi a')[-2].string
    #这个count可以了解组图有多少张照片
    for c in range(1,int(count)+1):
    url = img + '/' + str(c)
    respon = get_html(url)
    soup1 = BeautifulSoup(respon.text,'html.parser')
    for src in soup1.select('div.main-image p a img'):
    src=src['src']
    file = url.split('/')[-2]
    header = {
    'Referer':url,
    'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36'
    }
    conten = requests.get(src,headers=header)
    isExists = os.path.exists(file)
    # 判断结果
    if not isExists:
    \ # 如果不存在则创建目录
    # 创建目录操作函数
    os.makedirs(file)
    path = src.split('/')[-1]
    with open(file+'/'+path, 'wb') as f:
    f.write(conten.content)
    f.close()
    print(src)
    time.sleep(0.3)

    end = time.time()
    spend = end-start
    print('共花费{:.2f}秒'.format(spend))
    #通过调用time函数,可以知道花费多长时间完成工作
    '''

    3.效果图

    效果图.png

    相关文章

      网友评论

        本文标题:利用Python爬取妹子图

        本文链接:https://www.haomeiwen.com/subject/grkboqtx.html