拿到某网站的动漫图片
基于get请求,获取网页源代码的步骤分析,此处不作具体说明,可参考笔者的文章。
python-(6-3-1)爬虫—requests入门(基于get请求)
接着打开网页源代码,提取子页面的链接地址。
按住ctrl+F
,搜索taotu-main
,我们可以定位找到这些子页面的链接地址信息。
然后得到所有"a"标签的信息,将其遍历循环,从而得到每一个"a"标签后面对应的href,也就是子链接。
拿到子页面的源代码,然后从中拿到图片的下载地址
接着在网页源代码中搜索复制的文字,定位到这张图片的位置。
然后通过代码,就可以实现对下载地址的获取。
如果想要将图片存储在某一文件夹下,需要提前创建好文件目录。
在下载较多的图片时,为了防止高频的网站请求被服务器挂掉,我们可以导入time
模块,通过sleep
程序,让程序等待几秒钟,然后再进行新的页面访问请求。
另外,在执行代码时,pycharm会对当前加载的文件夹中的所有内容做一个索引,以便快速查找数据。而我们下载的图片尽管是新增的文件,但pycharm也会对其建立索引。当下载的图片很多时,会占用系统资源,让pycharm很卡,所以图片文件的索引便没有构建的必要。
如上图操作,便可以取消对其文件夹建立索引。
import requests
import sys
import io
from bs4 import BeautifulSoup
import time# 改变标准输出的默认编码
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='gb18030')domain = 'https://www.umei.cc/katongdongman/'
headers = {"user-agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Mobile Safari/537.36"
}
resp = requests.get(url=domain,headers=headers)# 与网页源代码上的字符集对应
resp.encoding = "utf-8"
#print(resp.text)# 把源代码交给bs
main_page = BeautifulSoup(resp.text,"html.parser")
# 把范围缩小,找到"taotu_main"下面的所有的"a"标签
a_list = main_page.find("div", class_= "taotu-main").find_all("a")# 网站url
url_pre = "https://www.umei.cc"# 遍历每一个a标签
for a in a_list:# 通过get拿到每个a标签中href属性的值href = a.get("href")url = url_pre + href# 拿到子页面的源代码child_page_resp = requests.get(url)child_page_resp.encoding = 'utf-8'child_page_text = child_page_resp.text# 从子页面中拿到图片的下载链接child_page = BeautifulSoup(child_page_text, "html.parser")# 找到div标签div = child_page.find("div", class_="big-pic")# 找到div下面的imgimg = div.find("img")# 找到img下面的src图片下载地址src = img.get("src")print(src)#break # 仅作测试使用# 下载图片img_resp = requests.get(src)# 拿到图片url最后一个/后面的内容img_name = src.split("/")[-1]# 放在当前目录下,img\目录下。该目录需要提前创建好with open("img/"+img_name,mode="wb") as f:# 获取图片数据的字节信息,就是图片的文件# 图片内容写入文件并保存f.write(img_resp.content)print("over!!!", img_name)# 每次遍历后程序休息1秒钟,防止因高频的访问请求被服务器干掉time.sleep(1)#break #测试需要print("all is over!!!!!!!")# 关闭访问请求的连接
resp.close()