2021-05-23

23
五月
2021

 

python练习小项目,爬虫爬取高清图片可视化

  1. 问题描述

通过python代码爬取某高清网站的图片。

本实验实现爬取url=https://pic.netbian.com/的高清图片

 

 
 

获取图片步骤:

  1. 先请求进入页面并且成功获取源代码。
  2. 查看网页源代码,根据网络结构找到要获取的部分
  3. 细化结构到图片的url(需要打开图片看是不是高清链接,如果不是高清链接需要再次请求访问页面再进行获取)
  4. 精确定位图片的url之后下载,并且以jpg格式逐个保存到目标地址。
  1. 解决方案

 注:需要先下载requests库和bs4库环境.(!pip install requests.  !pip install bs4)

       

  1. 首先对自己访问的头文件进行封装,避免被直接检查为垃圾软件。

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   

      结果展示:           

  1. 总结

通过学习,掌握到了许多爬虫知识,并且了解和熟悉了一些反爬虫的知识,以及正则表达式的简单运用,不过很多网站都会有反爬虫代码,和反爬虫的一些动作,比如爬取小米网站是就因为多次大量请求数据而被封掉了IP,所以要想爬取自己想到的数据,最难的感觉就是如何请求页面获取数据,一些成熟的网站反爬虫机制很强大,很难进行爬取数据,要想大量和多次爬取就更难了,还要多掌握一些更加专业的方法和技巧。

 

 

TAG

网友评论

共有访客发表了评论
请登录后再发布评论,和谐社会,请文明发言,谢谢合作! 立即登录 注册会员