Python3爬虫教程(四)

爬虫逻辑

对于有针对性的爬取数据,爬虫的每一层逻辑可以不必多么精妙,但必须力求准确,而这便需要探寻到网站的规律,亦或者逻辑(因为需要管理和维护,所以网站肯定有他自己的规律或者逻辑)
咳咳,还是这个福利网站(mzitu.com)
我们由浅入深
先尝试单个套图的爬取
那么
第一步:获取此套图的所有单页url
在这里插入图片描述
从首页F12探寻翻页按钮,我们可以察觉到这个网站的一个套图下的所有图片所在页面的url得规律,基础url+“/”+str(i)
并且我们可以获取到此套图一共42页
根据这个规律我们便可以爬取出这个套图下的所有图片的标题和链接
第二步:根据链接下载对应图片并存进一个目录
对于这个网站的图片服务器来说,如果同一ip访问频率太快,是会被禁止的,但是这个频率的界限存在于多线程,单线程下频率超不过临界,因此不必担心
第三步:并没有第三步,只需两步,只需两步,这个爬虫便能够完成
上代码:

import requests
import os
from lxml import html

all_message = []

def GetAllMessage(url):
    global all_message
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36'
    }

    print("开始解析地址:%s" % (url))
    page = requests.get(url=url,headers=headers)
    tree = html.fromstring(page.text)
    result = tree.xpath('//div[@class="pagenavi"]//a[last()-1]/@href')
    number_end = int("".join(result).replace(url + '/', ''))
    print("解析此套图一共 %d 张" % (number_end))
    print("开始解析此套图所有图片名称和地址!")
    for i in range(1, number_end + 1):
        page_url = url + "/" + str(i)
        page2 = requests.get(url=page_url, headers=headers)
        tree = html.fromstring(page2.text)
        img_url = tree.xpath('//div[@class="main-image"]//img/@src')
        img_name = tree.xpath('//div[@class="content"]//h2[@class="main-title"]/text()')
        img_list = {'img_name': img_name[0], 'img_url': img_url[0]}
        all_message.append(img_list)
    print(all_message)

def DownloadImg(url):
    global all_message
    path = './收藏/' + all_message[0]['img_name']
    print("开始构建套图存储目录:%s"%(path))
    is_exists = os.path.exists(path)
    if not is_exists:
        os.makedirs(path)
        print("目录 %s 构建成功!" % (path))
    else:
        print("目录 %s 已存在!" % (path))
    for i in range(len(all_message)):
        try:
            headers = {
                'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36',
                "Referer": url + "/" + str(i)
            }
            img = requests.get(url=all_message[i]['img_url'], headers=headers)
            with open(path + '/' + all_message[i]['img_name'] + '.jpg', "wb") as f:
                f.write(img.content)
                f.close()
        except Exception as e:
            print(e)
            pass
    print("套图 %s 下载完毕!" % (all_message[0]['img_name']))

if __name__ == '__main__':
    url = input("请输入mzitu.com的套图链接(第一页的链接):")
    GetAllMessage(url)
    DownloadImg(url)



在这里插入图片描述在这里插入图片描述
大功告成,只需简简单单的两个方法,此爬虫便宣告完成

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值