由于公司大佬都去实地部署项目了,所以作为前端切图仔的我,是不用过去滴
嘻嘻嘻进入今天的正题,python作为当下最热的语言,所以来蹭蹭热度,首先先从爬虫入手了。刚好是七夕前后,作为木有女朋友的前端仔,只能花花时间去爬点资源了,于是我对https://www.mzitu.com伸出了“ 猿手 ”
准备工作
python3.6安装好,本人用的是window(如果是使用linux的大佬也不会看我的文章了,哈哈哈)
requests库-----》一个python派发请求之类的库(个人理解)----》可以使用pip install requests安装
BeautifulSoup-------》一个处理xml、html之类标签的库,挺好用的,谁用谁知道---》安装同上流程
编辑器的话,看个人吧,本人是前端开发,所以直接使用vscode了
ok,一切准备就绪,准备发车
秋名山车神发车了第一步
先打开网站,看看网页源码,看看网页结构(兄弟hold住,你是来爬资源的,不是来看美女的)
好的,我们打开源码(鼠标右键,查看源码),然后你会发现
页面源代码
你可以看到,你要爬的图片就是在这些链接里
然后,打开你的编辑器,开始撸代码,下面这些代码就不用解释了吧,都又注释
import requests
from bs4 import BeautifulSoup
# 定义请求头,防止被识别为爬虫
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36",
"Referer": "https://www.mzitu.com/"
}
# 定义爬取的网站域名
all_url = "https://www.mzitu.com/"
# 派发请求,返回响应的html
start_html = requests.get(all_url,headers=headers)
# 使用beautifulSoup处理html的字符串
Soup = BeautifulSoup(start_html.text,'lxml')
# 打印获取回来的标签
print(Soup)
运行之后,命令行就打印东西了,让我来看一哈
运行结果
然后你就发现:哇,和刚刚查看的源代码一模一样耶!!!!!
这么神奇吗?
看官别急,我们来进行下一步的操作,下一步完成之后,你距离你的小姐姐又近了一步。刚刚我们通过请求返回了整个网页的源码,但是我们并不是全部都需要,我们只要截取我们需要的就好了,这个时候就是beautifulSoup出场的机会了
import requests
from bs4 import BeautifulSoup
# 定义请求头,防止被识别为爬虫
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36",
"Referer": "https://www.mzitu.com/"
}
# 定义爬取的网站域名
all_url = "https://www.mzitu.com/"
# 派发请求,返回响应的html
start_html = requests.get(all_url,headers=headers)
# 使用beautifulSoup处理html的字符串
Soup = BeautifulSoup(start_html.text,'lxml')
# 打印获取回来的标签
# print(Soup)
# 该api是查找ul的id为pins的标签,然后再找其下面的a标签
all_a = Soup.find('ul',id='pins').find_all('a')
# 循环遍历a标签的集合
for a in all_a:
# 打印a标签
print(a)
打印出来的就是通过筛选的a标签了,你要知道a标签里面可是包含有好多小姐姐嘞,到这里是不是动力十足了呢
小姐姐的集合
但是还不够,我们要拿的是图片url呀,然后你就想,这个简单,我直接用正则匹配出来不就好了吗?嘻嘻嘻,其实有更简单的方法
# 在循环中打印一下
print(a['href'])
就能把a标签中的url打印出来了,下面我们加大力度,不然篇幅过长我就会被各位打的,在循环中再次请求url,会返回html页面源码,我们是筛选出其中的一个标签
循环中再次请求
你看页面你就知道的,你要爬的是大的图片,不可能爬一张小图片吧,所以我们筛选返回的html中div的class为main-image下的img中的src,拿到url之后,就是下载图片了
resp = requests.get(a['href'], headers=headers)
trueHtml = BeautifulSoup(resp.text, 'lxml')
# 筛选url
url = trueHtml.find('div', class_="main-image").find('img')['src']
# 请求
result = requests.get(url, headers=headers)
# 文件的写入的路径
with open("H:\\python\\001\\img\\"+a.get_text()+".jpg", "wb") as f:
# 写入内容
f.write(result.content)
# 关闭文件
f.close()
然后你就发现你的文件夹里面多了一些小姐姐的图片
嘻嘻嘻
然后你会发现,咋这么少呀,就不能多爬点,我告诉你,没问题,下面我们就来多爬点。
添加循环,该循环控制的是翻页,所以,你懂的
你懂我意思吧
话不多bb,直接上代码
import requests
from bs4 import BeautifulSoup
# 定义请求头,防止被识别为爬虫
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36",
"Referer": "https://www.mzitu.com/"
}
# 定义爬取的网站域名
all_url = "https://www.mzitu.com/"
# 控制翻页
for i in range(1, 2):
start_html = requests.get(all_url+"/page/" + str(i) + "/", headers=headers)
# 使用beautifulSoup处理html的字符串
Soup = BeautifulSoup(start_html.text, 'lxml')
# 该api是查找ul的id为pins的标签,然后再找其下面的a标签
all_a = Soup.find('ul', id='pins').find_all('a')
all_a = list(set(all_a['href']))
# 循环遍历a标签的集合
for a in all_a:
resp = requests.get(a,headers=headers)
trueHtml = BeautifulSoup(resp.text, 'lxml')
# 筛选url
url = trueHtml.find('div', class_="main-image").find('img')['src']
# 请求
result = requests.get(url, headers=headers)
# 文件的写入的路径
with open("H:\\python\\001\\img\\"+a.get_text()+".jpg", "wb") as f:
# 写入内容
f.write(result.content)
# 关闭文件
f.close()
ok。到这里基本的请求你就搞定了,小姐姐也住到了你的“豪宅”(盘)里。可能你一次性爬太多的时候会报错,这是正常的,嘻嘻嘻,这只是单线程的爬虫,并没有错误处理啥的,而且使用的是你自己的ip,并没有做ip的动态代理。这个文章暂时先这样
溜了溜了
网友评论