Python《爬虫再练手》

今天发现了一个链接,是GitHub 上有哪些优秀的 Python 爬虫项目?

https://www.zhihu.com/question/58151047/answer/859783454

然后呢我大概扫了一眼,挑选了一个网站来搞,没错就是这个http://girl-atlas.net/

首页就是一个分页了
在这里插入图片描述

每一页的地址很有规律,在根地址上增加”?p=XX”,XX就是页码边贸,可见首页其实也是http://girl-atlas.net/?p=1 ,嗯,验证正确,因此我们只需要把最大页面数字记录下来就能遍历所有页面。

对于每一个页面都是列表展示
在这里插入图片描述

有六块div,里面的有标题,我们爬取出来作为目录,因为标题和图片都是指向了同一个新的页面地址。
在这里插入图片描述

接着我们点进去看到一个新的页面,专门来展示这个图集的。经过检查发现,所有图集的图片都在一起页面放好了,没有分页,很好很好。

于是一把爬取所有的照片。

按照惯例,我们先用单张图片做实验啊。
比如下面这张图片
在这里插入图片描述

测试代码如下:

import requests   #导入模块

def run7():
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36",
        "Referer": "http://girl-atlas.net/"
    }
    with open("D:/estimages/mn.jpg", "wb") as f :
        f.write(requests.get("http://img.meinvjpg.com/12/20121221/21230530d80828cac815.jpg!lrg", headers=headers).content)
        f.close

if __name__ == "__main__":   #主程序入口
    run7()    #调用上面的run方法

试验成功,是可以下载下来的。
在这里插入图片描述

下面贴出完整实验代码

import os
import requests
from bs4 import BeautifulSoup

rootrurl = 'http://girl-atlas.net/'
#rootrurl = 'http://girl-atlas.net/index1'
save_dir = 'D:/estimages/'
no_more_pages = 'END'
max_src_pages = 10


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

def getMaxPagesNum(url):
    html = BeautifulSoup(requests.get(url).text, features="html.parser")
    lis = html.find('ul', attrs={'class': 'pagination'}).find_all('a')[-2].string
    return int(lis)


def saveImgsCore(href, saveDir):
    html = BeautifulSoup(requests.get(href, headers=headers).text, features="html.parser")
    imgs = html.find('ul', attrs={'class': 'slideview'}).find_all('img')
    for img in imgs:

        # 获得图片的地址
        img_url = img.get('src')
        if img_url is None:
            img_url = img.get('delay')

        # 防止出现反盗链
        new_headers = {
            'User-Agent': "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1",
            'Referer': img_url
        }

        print("downloading : " + img_url)
        img = requests.get(img_url, headers=new_headers)  # 请求图片的实际URL
        with open(
                '{}/{}'.format(saveDir, img_url.split("/")[-1][:-4]), 'wb') as jpg:  # 请求图片并写进去到本地文件
            jpg.write(img.content)
    pass


def saveAllImgs(url):
    print("current page is: %s" % url)
    html = BeautifulSoup(requests.get(url, headers=headers).text, features="html.parser")
    divs = html.find_all('div', attrs={'class': 'col-md-11 col-sm-11'})
    for link in divs:
        a = link.find('h2').find('a')
        href = a.get('href')
        title = a.get_text()

        if not os.path.exists(save_dir + title):
            os.mkdir(save_dir + title)

        print("current group is: %s" % title)
        saveImgsCore(rootrurl + href, save_dir + title)



if __name__ == '__main__':
    maxPages = getMaxPagesNum(rootrurl)
    for i in range(1, (maxPages+1)):
        url = rootrurl + ('?p=%d' % i)
        saveAllImgs(url)

效果如下:
在这里插入图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值