手把手带你爬虫 | 爬取500px图片

Important

AI派在读学生小姐姐Beyonce

Java实战项目练习群

长按识别下方二维码,按需求添加

扫码添加Beyonce小姐姐

扫码关注

进Java学习大礼包

为什么需要加星标?

由于微信公众号出现了 “乱序” 排列的状况,也就是说:文章不会按照 “时间顺序” 推送给你。那么朋友们就不能第一时间,收到我的干货。因此希望您抽出一分钟,将AI派加为您的星标哦。

1300人已添加“星标

       

       

目标

爬取500px网站图片并保存到本地。

项目准备

软件:Pycharm

第三方库:requests,fake_useragent

网站地址:https://500px.com/popular

网站分析

首先拿到一个网站,先看一下目标网站是静态加载还是动态加载的。

右边有个下拉滚动条,下拉之后会发现,它是没有页码并且会自动加载的,一般这样就可以初步判断该网站为动态加载方式,或者还可以打开开发者模式,复制其中一个图片链接,Ctrl+U查看源代码,Ctrl+f打开搜索框,把链接地址粘贴进去,会发现根本找不到这个链接地址,这样就可以确定为动态加载。

在这里找到了图片链接,向下拉动滚动条,这里会再次加载下一页的内容。

在这里找到了图片链接,向下拉动滚动条,这里会再次加载下一页的内容。

这个就是网页的真实URL链接。

复制下来这前几个地址进行分析:

第一个:https://api.500px.com/v1/photos?rpp=50&feature=popular&image_size%5B%5D=1&image_size%5B%5D=2&image_size%5B%5D=32&image_size%5B%5D=31&image_size%5B%5D=33&image_size%5B%5D=34&image_size%5B%5D=35&image_size%5B%5D=36&image_size%5B%5D=2048&image_size%5B%5D=4&image_size%5B%5D=14&sort=&include_states=true&include_licensing=true&formats=jpeg%2Clytro&only=&exclude=&personalized_categories=&page=1&rpp=50
第二个:https://api.500px.com/v1/photos?rpp=50&feature=popular&image_size%5B%5D=1&image_size%5B%5D=2&image_size%5B%5D=32&image_size%5B%5D=31&image_size%5B%5D=33&image_size%5B%5D=34&image_size%5B%5D=35&image_size%5B%5D=36&image_size%5B%5D=2048&image_size%5B%5D=4&image_size%5B%5D=14&sort=&include_states=true&include_licensing=true&formats=jpeg%2Clytro&only=All+photographers%2CPulse&exclude=&personalized_categories=&page=2&rpp=50

会发现第一页是:page=1,第二页是:page=2…但是还有其他地方些许不一样,但是经过验证是没出问题的,这就发现了每一页的规律。

反爬分析

同一个ip地址去多次访问会面临被封掉的风险,这里采用fake_useragent,产生随机的User-Agent请求头进行访问。

代码实现

1.导入相对应的第三方库,定义一个class类继承object,定义init方法继承self,主函数main继承self。
import  requests
from fake_useragent import UserAgent
filename=0
class photo_spider(object):
    def __init__(self):
        self.url = 'https://api.500px.com/v1/photos?rpp=50&feature=popular&image_size%5B%5D=1&image_size%5B%5D=2&image_size%5B%5D=32&image_size%5B%5D=31&image_size%5B%5D=33&image_size%5B%5D=34&image_size%5B%5D=35&image_size%5B%5D=36&image_size%5B%5D=2048&image_size%5B%5D=4&image_size%5B%5D=14&sort=&include_states=true&include_licensing=true&formats=jpeg%2Clytro&only=&exclude=&personalized_categories=&page={}&rpp=50'
        ua = UserAgent(verify_ssl=False)
        #随机产生user-agent
        for i in range(1, 100):
            self.headers = {
                'User-Agent': ua.random
            }
    def mian(self):
     pass
if __name__ == '__main__':
    spider = photo_spider()
    spider.main()
2.发送请求,获取网页。
    def get_html(self,url):
        response=requests.get(url,headers=self.headers)
        html=response.json()#动态加载的json数据
        return html
3.获取图片的链接地址,保存图片格式到本地文件夹。
    def get_imageUrl(self,html):
        global filename
        content_list=html['photos']
        for content in content_list:
            image_url=content['image_url']
            #print(image_url[8])
            imageUrl=image_url[8]
            r=requests.get(imageUrl,headers=self.headers)
            with open('F:/pycharm文件/photo/'+str(filename)+'.jpg','wb') as f:
                f.write(r.content)
                filename+=1

这里说明一下,imageUrl=image_url[8]这里由于有多个image-url。

4.获取多页及函数调用。
    def main(self):
        start = int(input('输入开始页:'))
        end = int(input('输入结束页:'))
        for page in range(start, end + 1):
            print('第%s页内容' % page)
            url = self.url.format(page)#{}传入page即页码
            html=self.get_html(url)
            self.get_imageUrl(html)
            print('第%s页爬取完成'%page)

运行结果

打开本地F:/pycharm文件/photo/

完整代码

import  requests
from fake_useragent import UserAgent
filename=0
class photo_spider(object):
    def __init__(self):
        self.url = 'https://api.500px.com/v1/photos?rpp=50&feature=popular&image_size%5B%5D=1&image_size%5B%5D=2&image_size%5B%5D=32&image_size%5B%5D=31&image_size%5B%5D=33&image_size%5B%5D=34&image_size%5B%5D=35&image_size%5B%5D=36&image_size%5B%5D=2048&image_size%5B%5D=4&image_size%5B%5D=14&sort=&include_states=true&include_licensing=true&formats=jpeg%2Clytro&only=&exclude=&personalized_categories=&page={}&rpp=50'
        ua = UserAgent(verify_ssl=False)
        for i in range(1, 100):
            self.headers = {
                'User-Agent': ua.random
            }
    def get_html(self,url):
        response=requests.get(url,headers=self.headers)
        html=response.json()
        return html
    def get_imageUrl(self,html):
        global filename
        content_list=html['photos']
        for content in content_list:
            image_url=content['image_url']
            #print(image_url[8])
            imageUrl=image_url[8]
            r=requests.get(imageUrl,headers=self.headers)
            with open('F:/pycharm文件/photo/'+str(filename)+'.jpg','wb') as f:
                f.write(r.content)
                filename+=1
    def main(self):
        start = int(input('输入开始:'))
        end = int(input('输入结束页:'))
        for page in range(start, end + 1):
            print('第%s页' % page)
            url = self.url.format(page)
            html=self.get_html(url)
            self.get_imageUrl(html)
if __name__ == '__main__':
    spider = photo_spider()
    spider.main()

文末送送送送书

????简介:

介绍:250张图文解读机器学习和算法原理,利用大量图解和流程图相结合的方式讲解机器学习的基本知识及其常用经典算法的应用,全书没有大篇幅的理论介绍和复杂的数学公式推导,也没有生涩难懂的专业术语,而是通过浅显易懂的图示、直观的流程图以及与生活息息相关的实例应用让读者轻松学习和掌握机器学习知识,从而明白机器学习是如何影响和改变人类生活的。

上次没有免费白嫖到的现在可以买了,值值值!

上次没有免费白嫖到的现在可以买了,值值值!

上次没有免费白嫖到的现在可以买了,值值值!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值