钧桐带你爬取唯美图片,比新游戏还刺激!(附源代码)

本文介绍了如何通过Python爬虫获取网页信息,包括基本的requests抓取、headers伪装,解析HTML找元素并保存图片,以及扩展到多网站的爬取策略。重点讲解了如何应对headers反爬机制,使用工作台分析user-agent并实现更高效解析。
摘要由CSDN通过智能技术生成

第一步:获取:网页的信息

1.最简单的直接获取

我们通过最简单的python代码来获取百度首页的网页代码!http://www.baidu.com

import requests
response = requests.get('https://www.baidu.com')
html= response.text
print(response.request.headers)
print(response.text)

结果如下
我可以观察到:
{‘User-Agent’: ‘python-requests/2.21.0’, ‘Accept-Encoding’: ‘gzip, deflate’, ‘Accept’: ‘/’, ‘Connection’: ‘keep-alive’}

用户的headers显示是python-requests/2.21.0
那么这就是第一个反爬机制
在这里插入图片描述

2.直接爬取被headers反爬机制所阻止

在遇到有一些对headers进行限制的网页时,我们可以通过改变headers来进行获取。
比如,爬取图片的时候,对于某个图片网址,我们通过1.来进行获取时获取不到的,会被拒绝。
可以看到爬取的网页代码主体是乱码的
在这里插入图片描述
并且还会问你是机器人吗?还说会调查你的浏览器!确保不是恶意攻击!
爬取其实和floods网络攻击有相似之处
在这里插入图片描述
在这里插入图片描述

3.更改headers来进行反反爬

import requests
headers={
    'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.67 Safari/537.36 Edg/87.0.664.47'
}
response = requests.get('https://www.vmgirls.com/12234.html',headers=headers)
html= response.text
print(response.request.headers)
print(response.text)

爬取到了正常的网页代码!
在这里插入图片描述

如果获得这个headers呢?

以百度网页为例子
按F12进入工作台,很神奇吧!
百度的首页按F12进入后还可以看到校园招聘的信息!
诗写的不错呢!
crtl+shift+I也可以打开,换着用!
在这里插入图片描述
我在这个界面上刷新一次,就会出现网页所需要的图片,json文件等的内容,我们点开第一个文件
在这里插入图片描述
哇!我们看到一个新世界,让我们康康有没有user-agent的信息呢!
在这里插入图片描述
这里的user-agent就是容许访问的user-agent,我们伪装成这个就可以了啊!太棒了!

可能遇到的困难

有的网页,比如这个唯美图片网页啊,它不让用快捷键打开工作台,我们可以从旁边的三个小点进入工作台,但是进入工作台后,网页会自动跳转,这个反爬机制就有点意思了。
在这里插入图片描述

但是完全不会妨碍我们获得网页的信息的!
因为就我个人观察,所有的网页的user-agent都是一样的0.0
那么,也就是说,对于或者所有的网页信息都可以直接使用这种改变headers的方式进行爬取。
那么,我们还需要用到工作台吗?
当然,工作台能够帮助我们更快的查询到网页的元素代码所在位置!
下面让我们马上进入网页解析部分

第二步:解析网页

一般要先找到网页的元素相关代码
在这里插入图片描述
但是对于唯美图片网页啊,前面说了用不了工作台,直接把爬出来的网页代码打出来,自己来找

# 这里的html是前面爬取的网页内容
import re
import os
dir_name = re.findall('<h1 class="post-title h1">(.*?)</h1>',html)[-1]
if not os.path.exists(dir_name):
    os.mkdir(dir_name)
urls =re.findall('<a href="(.*?)" alt=".*?" title=".*?">',html)
print(urls)
print(dir_name)

在这里插入图片描述

第三步:保存图片

import time
for url in urls:
    time.sleep(1)   #设置休眠1s一次,不然给人家网站爬崩了
    file_name = url.split('/')[-1] # 找到图片名字
    print(file_name)
    url="https:"+url #上次解析爬出来的信息是没有https;头的,我们进行拼接
    response = requests.get(url,headers=headers) # 找到对应的图片
#     print(response.content)
    
    with open(dir_name +'/'+file_name,'wb') as f:
        f.write(response.content)   #把图片写入文件夹

从爬一个网站扩展到多个网站

把前面的爬取定义为一个函数

def get_pic(path):
    headers={
        'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.67 Safari/537.36 Edg/87.0.664.47'
    }
    response = requests.get(path,headers=headers)
    html= response.text
    dir_name = re.findall('<h1 class="post-title h1">(.*?)</h1>',html)[-1]
    if not os.path.exists(dir_name):
        os.mkdir(dir_name)
    urls =re.findall('<a href="(.*?)" alt=".*?" title=".*?">',html)
    # print(urls)
    print(dir_name)
    for url in urls:
        time.sleep(0)
        file_name = url.split('/')[-1]
        print(file_name)
        url="https:"+url
        response = requests.get(url,headers=headers)
    #     print(response.content)

        with open(dir_name +'/'+file_name,'wb') as f:
            f.write(response.content)

主函数,将爬取的网页用for循环拼接

注意:这里要写一个异常捕获,这个网站没有就抛出!不然爬取的时候会断掉
在这里插入图片描述

# 12230---13000
import requests
import re
import os
import time
i=12230
while i<13000:
    i+=1
    try:
        paths='https://www.vmgirls.com/'+str(i)+'.html'
        get_pic(paths)
        print("************************"+i)
    except:
        print("************************"+i)

展示一下爬取的成果

在这里插入图片描述

爬取还有很多地方可以学习

比如异步爬取,提高速度,上面的方法比较慢

还可以用xpath路径等来爬取,以后有空更新啦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值