Python3网络爬虫:我要爬帅哥!!!(爬取帅哥图)

转载请注明作者和出处:

https://blog.csdn.net/qq_45627785?spm=1011.2124.3001.5343

运行平台:Windows

Python版本:Python 3.x

 

    前言

    预备知识

    实战

        0.背景

        1.requests安装

        2.爬取单页目标链接

        3.爬取多页目标链接

        4.整体代码

总结

0 前言

        主要是刚复习完Python的知识,想做一点东西出来。之前其实就有了做爬虫的心思,但是爬什么呢,这也是个问题。看到网上有许多爬妹子图的,那我就来爬爬哥哥图趴(笑)。常言道,看哥哥可以美容养颜,延年益寿。那么,我们今天就来爬爬趴!

1预备知识

        为了能快速上手写代码,我们要先来了解下我们这次爬虫代码所需要的第三方库:BeautifulSoup和requests。

安装:直接 win + R打开CMD  然后在命令行提示符后输入pip install BeautifulSoup4 一般就可以了,如果遇上各种问题,请自行百度关键词解决,安装requests也是打开CMD,然后在命令行提示符后输入 pip install requests即可。

库的具体用法:https://pypi.org/在其中查看即可,如想看中文教程,浏览器里直接查询相应库的用法,也会有很多教程的。

2实战

2.1背景

        爬取《哇图》网的帅哥图片!

        URL : http://www.walltu.com/sg/

        先看一眼网站的样子:

2.2爬取单页目标链接

        首先,我们先来爬取 “明星帅哥” 这一页的网址,打开它的源代码,我们可以看到其中图片的源代码<img>标签中的SRC属性下,我们顺利成章的找到了图片的网址,那我们来看一下代码。

 

代码:

#导入所需要的库
from bs4 import BeautifulSoup
import requests
import os
from urllib.request import urlretrieve


n = 0
list_url = []
url = 'http://www.walltu.com/tuku/mingxingshuaige/'

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

req = requests.get(url=url, headers=headers)
req.encoding = 'utf-8'
html = req.text
bf = BeautifulSoup(html, 'lxml')
img_url = bf.find_all("img")

#获取图片链接
for each in img_url:
    list_url.append(each.get('src'))

#创建文件
if not os.path.exists('./imgs'):
    os.mkdir('./imgs')

#用循环将图片链接转化为图片
while n < (len(list_url)):
    img_url = list_url[n]
    urlretrieve(img_url, './imgs/%s.jpg' % n)
    n = n + 1

print("下载完成")

然后,我们来看一下运行效果趴......

ok, 此时我们可以看到,明星帅哥图已经爬下来啦!(鸡冻)

    代码的主体木有问题,就是在保存文件时参数携程了 'Desktop' ,这就导致了下载在桌面上的文件只有一个,且没有以图片形式保存,我还以为我的代码出了神马灰常严重的问题,多亏扎克斯大佬指出,再次向大佬献上我的膝盖。那么我们来看下扎克斯大佬关于爬取明星帅哥这页的图片的代码......

# -*- coding:UTF-8 -*-
from bs4 import BeautifulSoup
import requests
import os

url = "http://www.walltu.com/tuku/mingxingshuaige/"

resp = requests.get(url)

soup = BeautifulSoup(resp.text, 'lxml')

# 通过id找到图片主体
p = soup.find("p", {'id': 'l'})

imgs = p.find_all("img")

#创建文件
if not os.path.exists('./imgs'):
    os.mkdir('./imgs')

#用for循环得到src
for i in range(len(imgs)):
    src = imgs[i]['src']

#直接用get().content得到图片内容并将其写入文件
    try:
        with open('./imgs/%s.jpg' % i, 'wb') as f:
            f.write(requests.get(src).content)
    except Exception as e:
        continue

相对来说确实是很简洁了.......

2.3爬取多页图片链接

        虽然爬一页是成功了,但这一页的帅哥肿么能满足我们呢(笑),我们的目标是所有标签里的首页帅哥(见下图)

那我们先来看一下源代码:

通过代码,我们可以看到<p id = "q">是上述链接的主体,那我们写代码就有了思路:

#导入需要的库
from bs4 import BeautifulSoup
import requests
import os
from urllib.request import urlretrieve


n = 0
s = 0
list_url = []
url_1 = []

url = 'http://www.walltu.com/sg/'

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


req = requests.get(url=url, headers=headers)
req.encoding = 'utf-8'
html = req.text

soup = BeautifulSoup(html, 'lxml')

#通过id得到标签主体的url
p = soup.find("p", {'id': 'q'})

content = p.find_all('a')

for i in content:
    url_1.append(i.get('href'))

#得到上面标签中每一页的url
while s < (len(url_1)):
    url = url_1[s]
    s = s + 1

    real_url = 'http://www.walltu.com' + url

    req = requests.get(url=real_url, headers=headers)

    req.encoding = 'utf-8'
    html = req.text
    soup = BeautifulSoup(html, 'lxml')

    img_url = soup.find_all("img")

    for each in img_url:
        list_url.append(each.get('src'))

#创建文件
if not os.path.exists('./imgs'):
    os.mkdir('./imgs')

#得到并下载每一张图片
while n < (len(list_url)):
    img_url = list_url[n]

    try:
        urlretrieve(img_url, './imgs/%s.jpg' % n)
    except Exception as e:
        print(img_url)
    n = n + 1

print("下载完成")

ok,让我们看下运行效果

哦豁,5分钟之内,1345张各式各样的帅哥到位,效果拉满哇!

总结

        这次的网站总体来说结构比较简单,也没有涉及到反爬什么的,也不用增加代理ip, 休眠时间什么的......编写的过程中,不是很建议用循环,循环涉及到覆盖的问题,而且循环也容易把自己绕晕,索引的值也需要注意。不如扎克斯大佬直接get().content比较简单。总的来说,爬到哥哥们还是很开心哒,人生寂寞如雪,唯有帅哥(图片)永相随哇!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值