阅读之前先保证会使用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即是我们爬的图片!