python小白爬虫第一篇

由于公司大佬都去实地部署项目了,所以作为前端切图仔的我,是不用过去滴
python小白爬虫第一篇
文章图片
嘻嘻嘻 进入今天的正题,python作为当下最热的语言,所以来蹭蹭热度,首先先从爬虫入手了。刚好是七夕前后,作为木有女朋友的前端仔,只能花花时间去爬点资源了,于是我对https://www.mzitu.com伸出了“ 猿手 ”
准备工作
python3.6安装好,本人用的是window(如果是使用linux的大佬也不会看我的文章了,哈哈哈)
requests库-----》一个python派发请求之类的库(个人理解)----》可以使用pip install requests安装
BeautifulSoup-------》一个处理xml、html之类标签的库,挺好用的,谁用谁知道---》安装同上流程
【python小白爬虫第一篇】编辑器的话,看个人吧,本人是前端开发,所以直接使用vscode了
ok,一切准备就绪,准备发车
python小白爬虫第一篇
文章图片
秋名山车神发车了 第一步
先打开网站,看看网页源码,看看网页结构(兄弟hold住,你是来爬资源的,不是来看美女的)
好的,我们打开源码(鼠标右键,查看源码),然后你会发现

python小白爬虫第一篇
文章图片
页面源代码
你可以看到,你要爬的图片就是在这些链接里
然后,打开你的编辑器,开始撸代码,下面这些代码就不用解释了吧,都又注释

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)

运行之后,命令行就打印东西了,让我来看一哈

python小白爬虫第一篇
文章图片
运行结果
然后你就发现:哇,和刚刚查看的源代码一模一样耶!!!!!

python小白爬虫第一篇
文章图片
这么神奇吗?
看官别急,我们来进行下一步的操作,下一步完成之后,你距离你的小姐姐又近了一步。刚刚我们通过请求返回了整个网页的源码,但是我们并不是全部都需要,我们只要截取我们需要的就好了,这个时候就是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标签里面可是包含有好多小姐姐嘞,到这里是不是动力十足了呢

python小白爬虫第一篇
文章图片
小姐姐的集合
但是还不够,我们要拿的是图片url呀,然后你就想,这个简单,我直接用正则匹配出来不就好了吗?嘻嘻嘻,其实有更简单的方法
# 在循环中打印一下 print(a['href'])

就能把a标签中的url打印出来了,下面我们加大力度,不然篇幅过长我就会被各位打的,在循环中再次请求url,会返回html页面源码,我们是筛选出其中的一个标签

python小白爬虫第一篇
文章图片
循环中再次请求
你看页面你就知道的,你要爬的是大的图片,不可能爬一张小图片吧,所以我们筛选返回的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()

然后你就发现你的文件夹里面多了一些小姐姐的图片

python小白爬虫第一篇
文章图片
嘻嘻嘻
然后你会发现,咋这么少呀,就不能多爬点,我告诉你,没问题,下面我们就来多爬点。
添加循环,该循环控制的是翻页,所以,你懂的

python小白爬虫第一篇
文章图片
你懂我意思吧
话不多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的动态代理。这个文章暂时先这样

python小白爬虫第一篇
文章图片
溜了溜了

    推荐阅读