Python新手爬虫训练小项目《爬取彼岸图网》(超详细讲解版)
这是我的第一篇文章,作为一名新手爬虫,这个算是我这几天来的努力成果,虽然代码寥寥几行但花费了大半天,新手上路还是不能只看视频,真正做项目时,真的有点束手无策,所以谨以此篇做个小总结,也希望能和新学python爬虫的小可爱们都能继续坚持学习下去。
好啦,废话不多说了,上代码:
import requests
from bs4 import BeautifulSoup #导入requests,BeautifulSoup模块
first_url="https://pic.netbian.com/tupian/"
check_img=input("请输入你要查询照片的序号:") #输入照片序号
url=first_url+check_img+".html" #字符串的拼接
headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 Edg/91.0.864.70"} #UA伪装
response=requests.get(url=url,headers=headers)
soup=BeautifulSoup(response.content.decode("gbk"),"lxml") 实例化soup对象
file_name=soup.h1.text#获取文件名
url2="https://pic.netbian.com/"+soup.img["src"]#照片真实地址,并不一定是我们看到的大图网址
response2=requests.get(url=url2,headers=headers) #同上文
with open(file_name+".jpg","wb") as f:
f.write(response2.content)
print(file_name+"文件保存完毕!!!") #保存文件
第一步 导入相关模块
import requests
from bs4 import BeautifulSoup #导入requests,BeautifulSoup模块
这里我用的是requests库(主要是向网站服务器发送请求用的,我是这么理解的),相比较urllib.request库要简单一些;还有一个是BeautifulSoup库(主要是来解析提取网站数据的)。
第二步 向网站发送请求
first_url="https://pic.netbian.com" #首先先进入彼岸图网的网站
再随便点击一张图片:
发现网址出现变化,多了"/tupian/27712.html"的后缀。
再点击一张图片:
出现规律了,小可爱们发现了吗?对,相同的是"/tupian/…html",只是数字不同了,(我们可以直接在网站输入url处修改数字,看是否意味着有不同的照片)
(上面的两幅图片顺序反了!!)
事实证明我们的猜想没错,数字对应着不同的照片所以就有了我下面的代码:
check_img=input("请输入你要查询照片的序号:")
url=first_url+check_img+".html" #这是出现大图的网址
所以这就是我代码中的url,变为了:
first_url="https://pic.netbian.com/tupian/"
check_img=input("请输入你要查询照片的序号:")
url=first_url+check_img+".html"
headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 Edg/91.0.864.70"}
我们肯定是要保存美美的图片滴,所以url也应该是这个大图页面的url
第二步需要注意的是requests库有get()和post()两种方法发起请求,get和post的参数及用法我就不解释了,可以问度娘!!!(其实我也不是特清楚,哈哈),get和post关键是要记住前三个参数,前两个它们是相同的,是url和headers(UA伪装,网站服务器通过user-agent来判断是人为来访问网站还是爬虫来进行访问!!)下面是查询方法:
第三个参数get的是params,就是给url的参数,如下图:
第三个参数post的是data,同上也是url的参数,也是上图方式查看
由图:
可知这是get方法
response=requests.get(url=url,headers=headers) #三个参数上文都已给出
第三步 实例化对象
soup=BeautifulSoup(response.content.decode("gbk"),"lxml") 实例化soup对象
BeautifulSoup有两个参数,详细了解请看https://www.cnblogs.com/Romantic-Chopin/p/12451039.html。
简单点来说就是第一个是从网页获取得源码标签,第二个是解析器的选择。
在这里补充说明,获取网页信息之后就应该将它表示出来,一个是content方法(将网站信息转化为二进制的源码数据),之后因为是二进制的对于我们新手来说不能看懂所以需要进行解码。要用到decode方法,在这里需要注意的是,将数据解码成什么样的编码,我们需要查看网页源代码,右键单击鼠标会出现这样的界面,附图:
点击查看源代码,查看"meta-chaset",可以看出网页是什么编码,彼岸图网的是"gbk"
ps:
另一个是text方法,直接将网页数据以我们看的懂的方式呈现出来(看的懂的前提是要懂一点前端知识)
详情请点击:content和text方法的区别
第四步 保存文件
with open(file_name+".jpg","wb") as f:
f.write(response2.content)
print(file_name+"文件保存完毕!!!") #保存文件
详情见:with open语句用法
BeautifulSoup的数据解析
file_name=soup.h1.text#获取文件名
url2="https://pic.netbian.com/"+soup.img["src"]#照片真实地址,并不一定是我们看到的大图网址
实例化对象好了之后,我们就可以用BeautifulSoup的解析方法了
格式:”实例化好的对象“+”.标签名",如代码中的soup.h1。
在这里推荐一个视频,我自己也在看,适合刚接触爬虫的我们这些新手上路:
bs4具体使用详解
好啦,这就是本篇文章的全部内容,如果小可爱们喜欢就请点个小赞鼓励一下吧!!!
文章 | 戴眼镜的it小孩纸