爬虫是Python的一个重要的内容,使用Python爬虫我们可以轻松的从网络中批量抓取我们想要的数据。
网络爬虫,又称为网页蜘蛛。是一种按照一定规则获取网页内容的程序,爬虫被广泛用于互联网搜索引擎或其他类似网站,例如谷歌、百度,爬虫可以自动采集所有其能够访问到的页面内容,以获取或更新这些网站的数据。从功能上来讲,爬虫一般分为数据采集,处理,储存三个部分。
本文将基于爬取某桌网图片并存储为例,详细介绍Python爬虫的基本流程。
如果你还没安装好python以及IDE的话,可以看下这篇文章:python以及PyCharm安装教程
1.确定URL(链接)、分析网页
点击下一页URL不发生变化是动态加载;如果网页需要往下拉才能查看更多的内容的一般都是动态加载。
然后查看内容是否在网页源代码里面,如果在的话,一般都是静态网页,反之,则是动态加载网页。
2.模拟浏览器,获取数据
一般用requests、urllib等库实现HTTP网络请求,获取网页源代码或者json数据。
3. 解析网页,提取数据
一般用re正则表达式、Beautiful Soup、xpath等方法提取网页数据。
4.保存数据
提取数据后,可以对文本、视频、图片等文件进行保存。文本可以保存为TXT、DOCX、CSV等文件格式。图片可以保存为jpg等格式。视频可以保存为MP4等格式。
三、确定目标URL,然后进行分析网页
此次爬取的是某桌网一组杨洋的图片,一共9张图片。
目标URL:http://www.win4000.com/meinv215413.html,这是这组图片的首页url。
我们把网页往下拉,发现下面有这组图的缩减图。
我们右键查看网页源代码,查看图片内容是否在网页源代码中。
我们CTRL+f查找组图的标题,发现图片内容在网页源代码中,图片的url放在a标签中。其中data-original存的是图片的真实url。
四、着手写代码
既然知道了网页的url和图片的真实url,以及网页是静态网页,那么就可以正式写代码了。
第一步 导入依赖库
#网络请求库
import requests
#网页解析库
import re
re库是python自带的,不需要安装;
requests是外部库,需要用命令行进行安装,具体操作:按住键盘的windows+R键,调出运行窗口,在输入框输入cmd,然后复制命令行:pip install requests到弹出的窗口。
第二步 模拟浏览器,请求数据
#模拟浏览器
headers={
'User-Agent':'Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/80.0.3987.162Safari/537.36'
}
建立headers这一步是为了告诉网站,你不是爬虫,防止被网页检测到。一般的网站只用这个就行了,但有些网站还需要携带Cookie、Referer等参数。
#请求数据
res=requests.get('http://www.win4000.com/meinv215413.html',headers=headers).text
这里用到requests库中的get请求,之所以是get请求,可以点击鼠标右键,然后点击检查;或者点击键盘的F12进行查看,具体操作可以看下图。
把headers参数传进去;text是为了请求网页的源代码。
第三步 解析网页,获取图片url
#解析图片
urls=re.findall('data-original="(.*?)" alt="杨洋黑色西装酷帅品牌活动图片"',res)
从上面的分析网页可以知道,我们发现图片的url存在data-original中,我们直接用re中的findall方法进行提取。然后用()括住data-original中的url,括号是表示需要的内容。(re库在此不作详细讲解,下次再出专题)
然后用万能匹配.*?来匹配图片的url。
第四步 保存图片
#遍历图片url
for url in urls:
#用replace对url中的_130_170替换为空。
#这步是为了下载大图,如果url多了_130_170就是缩减图了
urlsd = url.replace('_130_170', '')
#准备图片的名字
file_name = urlsd.split('/')[-1]
#对图片url进行请求,传入headers参数
res_=requests.get(urlsd,headers=headers)
#进行图片保存;
#with open是不断打开文件夹然后保存图片;
#r'D:\untitled1\爬虫④\美桌网_爬取杨洋图片【入门】\杨洋图片\{}'这是保存路径,r是转义字符
#wd是进行二进制保存
#format(file_name)是把图片的名字传入{}中
#as f 是对前面的代码命名为 f
with open(r'D:\untitled1\爬虫④\美桌网_爬取杨洋图片【入门】\杨洋图片\{}'.format(file_name),'wb') as f:
#保存
f.write(res_.content)
运行后,查看下成果,都是高清大图。
五、完整代码
# -*-codEing = utf-8 -*-
#导入依赖库
import requests
import re
#构建请求头,模拟浏览器
headers={
'User-Agent':'Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/80.0.3987.162Safari/537.36'
}
#请求数据
res=requests.get('http://www.win4000.com/meinv215413.html',headers=headers).text
#解析图片
urls=re.findall('data-original="(.*?)" alt="杨洋黑色西装酷帅品牌活动图片"',res)
#保存图片
for url in urls:
urlsd = url.replace('_130_170', '')
file_name = urlsd.split('/')[-1]
res_=requests.get(urlsd,headers=headers)
with open(r'D:\untitled1\爬虫④\美桌网_爬取杨洋图片【入门】\杨洋图片\{}'.format(file_name),'wb') as f:
f.write(res_.content)
六、结语
1.本文简单的介绍python爬虫的基本步骤、反爬措施,如何分析网页,如何请求数据、提取数据和保存数据。
2.本文因为是新手教程且代码量以及图片较少,所以未使用函数式编程以及多线程爬取。
3.本文只爬取了少量的图片,有点大材小用。爬虫一般是用于爬取大量数据,如果数据量少的话,一般不会使用。
4.下篇文章将在此篇文章的基础之上,进行多页爬取。
本文分享自 Python与Excel之交 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!