python,分析网页,使用 bs4和requests 爬取网页指定图片

阅读之前先保证会使用python并且了解html前端结构
首先打开
目标网站
我们可以看到一个动漫角色的图片,现在我们要利用python程序来保存这张图片到本地。
1.右键图片
选择审查元素(有些浏览器叫做检查)
然后Ctrl+shift+c,打开选取元素模式,点击图片即可找到下图的位置
在这里插入图片描述
可看到这张图片,也就是网页的结构
我们要提取的图片在body->div->div->div->img中。
因为这个img有id,所以我们很容易定位
标签img,id=“PicBigBtn”里的src值即可,
但是我们将这个图片复制打开,发现他的像素很低,所以我们判断他不是我们要找的图片。
回到目标网站
在这里插入图片描述
右上角可以看到放大,我们点击放大,看到了清晰的图片
这时再次审查元素。
然后Ctrl+shift+c,打开选取元素模式,在图片上的时候我们发现一个翻页div遮挡了图片这时候我们来到左下高亮部分右键。
在这里插入图片描述
在这里插入图片描述
删除元素。删除后再次选取元素模式,点击图片

这样就找到我们要的img了,复制这个img的地址打开新页面,我们可以看到清晰的图片
这张图片我们可以看出,很容易索引。
在这里插入图片描述
因为id是唯一的,我们只需要寻找img标签id等于layerDeskPic即可,

分析完了,接下来我们来到我们的python

import requests

from bs4 import BeautifulSoup

导入我们的两个包
写好我们的代码

import requests

from bs4 import BeautifulSoup


def pachong():
    url = "http://desk.zol.com.cn/bizhi/755_8386_2.html"  # 目标网站
    html = requests.get(url)  # requests的get方法,参数填写url即可返回网页全部内容
    soup = BeautifulSoup(html.content, "html.parser")  # BeautifulSoup方法,第一个参数为完整的网页,上一句我们已经获得。
    # (接上行)第二个参数是网页解析器,这里我们使用比较方便的html.parser解析器。(如果html变量不用content的话将会返回访问网页的状态码)
    image_html = soup.find("img", id="layerDeskPic").attrs["src"]  # 在网页分析中已经阐明寻找的位置,img表情指定id里的src(图片网址)
    the_image = requests.get(image_html)  # 再次使用requests的get方法,参数为图片的网址。
    with open("图片.jpg", "wb+") as f:
        f.write(the_image.content)  # 写入文件,the_image的content属性,(the_image返回访问网页的状态码)


if __name__ == '__main__':
    pachong()

运行发现得到图片,一个1x1像素的图片…
然后我们将后边注释掉

import requests

from bs4 import BeautifulSoup


def pachong():
    url = "http://desk.zol.com.cn/bizhi/755_8386_2.html"  # 目标网站
    html = requests.get(url)  # requests的get方法,参数填写url即可返回网页全部内容
    soup = BeautifulSoup(html.content, "html.parser")  # BeautifulSoup方法,第一个参数为完整的网页,上一句我们已经获得。
    # (接上行)第二个参数是网页解析器,这里我们使用比较方便的html.parser解析器。(如果html变量不用content的话将会返回访问网页的状态码)
    image_html = soup.find("img", id="layerDeskPic").attrs["src"]  # 在网页分析中已经阐明寻找的位置,img表情指定id里的src(图片网址)

    print(image_html)

    # the_image = requests.get(image_html)  # 再次使用requests的get方法,参数为图片的网址。
    # with open("图片.jpg", "wb+") as f:
    #     f.write(the_image.content)  # 写入文件,the_image的content属性,(the_image返回访问网页的状态码)


if __name__ == '__main__':
    pachong()

输出查看内容,内容是《https://icon.zol-img.com.cn/article/slideNew/blank.gif》
这显然有误,因此我们猜测是网页结构发生了变化,我们再回到目标网站
审查元素,然后用元素选取选择右上角的放大按钮
在这里插入图片描述
在这里插入图片描述
可见图片的网址是这个
我们点一下这个按钮放大,然后关闭放大后的图片

可以对比发现,这个值变了,具体怎么变的我们不需要深究。
我们比较这两个值发现,变的只有中间的分辨率数字
https://desk-fd.zol-img.com.cn/t_s960x600c5/g5/M00/01/0F/ChMkJlbKwqqIJUCGAAHop_ytZA4AALGrQN-1PwAAei_545.jpg

http://desk.fd.zol-img.com.cn/t_s1920x1080/g5/M00/01/0F/ChMkJlbKwqqIJUCGAAHop_ytZA4AALGrQN-1PwAAei_545.jpg
因此我们只需要获取第一个网址,对字符串960x600c5替换为1920x1080即可

import requests

from bs4 import BeautifulSoup


def pachong():
    url = "http://desk.zol.com.cn/bizhi/755_8386_2.html"  # 目标网站
    html = requests.get(url)  # requests的get方法,参数填写url即可返回网页全部内容
    soup = BeautifulSoup(html.content, "html.parser")  # BeautifulSoup方法,第一个参数为完整的网页,上一句我们已经获得。
    # (接上行)第二个参数是网页解析器,这里我们使用比较方便的html.parser解析器。(如果html变量不用content的话将会返回访问网页的状态码)
    image_html = soup.find("img", id="bigImg").attrs["src"]  # 在网页分析中已经阐明寻找的位置,img表情指定id里的src(图片网址)
    image_html = change(image_html)  # 调用change函数
    the_image = requests.get(image_html)  # 再次使用requests的get方法,参数为图片的网址。
    with open("图片.jpg", "wb+") as f:
        f.write(the_image.content)  # 写入文件,the_image的content属性,(the_image返回访问网页的状态码)


def change(image_html):
    return image_html.replace("960x600c5", "1920x1080")  # 替换字符串


if __name__ == '__main__':
    pachong()

改写后的代码,运行,我们发现已经可以正常使用了,在程序的目录下的图片.jpg即是我们爬的图片!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值