python练习小项目,爬虫爬取高清图片可视化
通过python代码爬取某高清网站的图片。
本实验实现爬取url=https://pic.netbian.com/的高清图片
获取图片步骤:
- 先请求进入页面并且成功获取源代码。
- 查看网页源代码,根据网络结构找到要获取的部分
- 细化结构到图片的url(需要打开图片看是不是高清链接,如果不是高清链接需要再次请求访问页面再进行获取)
- 精确定位图片的url之后下载,并且以jpg格式逐个保存到目标地址。
注:需要先下载requests库和bs4库环境.(!pip install requests. !pip install bs4)
- 首先对自己访问的头文件进行封装,避免被直接检查为垃圾软件。
head = { "User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36"
}
访问页面:request = urllib.request.Request(url = url,headers = head)
获取页面源代码:response = urllib.request.urlopen(request)
存储到Html中: Html = response.read().decode('gbk')
异常处理:
except urllib.error.URLError as e:
# 网页报错代码捕获 418等等
if hasattr(e,"code"):
print(e.code)
if hasattr(e,"reason"):
print(e.reason)
2、
检查源代码后发现目标图片定位到某的ul结构下:
用BeautifulSoup库中的soup.find_all方法获取html源代码中的class= clearfix 部分,再使用正则表达式匹配找到图片准确路径。
soup=BeautifulSoup(html,"html.parser")
ul=soup.find_all("ul",class_="clearfix")
正则表达式匹配:
link = re.compile('<a href="(.*?)"',re.S)
hreflist = re.findall(link,str(i))
3、
但是由于发现不是高清图片地址,所以需要再次请求新的图片页面!
检查源代码发现,真正的高清图片地址隐藏在https://pic.netbian.com/tupian/27301.html页面下。
重新定位并且找到图片地址!
#再单独请求网站
html=askurl(fixhref)
soup=BeautifulSoup(html,"html.parser")
imglist = soup.find_all('div',class_='photo-pic')[0]
#正则表达式匹配找到图片准确路径
imglink = re.compile('src="(.*?)"',re.S)
imgsrc = re.findall(imglink,str(imglist))[0]
4、下载!
通过requests.get方法下载图片,格式str(images)+ '.jpg 正在保存...'
下载到data/images中,代码如下:
images = requests.get(imgsrc).content
print(str(images)+ '.jpg 正在保存...')
with open(r'data/images{}'.format(temp) + ".jpg", 'wb')as fp:
fp.write(images)
temp += 1
结果展示:
通过学习,掌握到了许多爬虫知识,并且了解和熟悉了一些反爬虫的知识,以及正则表达式的简单运用,不过很多网站都会有反爬虫代码,和反爬虫的一些动作,比如爬取小米网站是就因为多次大量请求数据而被封掉了IP,所以要想爬取自己想到的数据,最难的感觉就是如何请求页面获取数据,一些成熟的网站反爬虫机制很强大,很难进行爬取数据,要想大量和多次爬取就更难了,还要多掌握一些更加专业的方法和技巧。