打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
手把手带你爬虫 | 爬取500px图片
userphoto

2022.07.28 江苏

关注

丨❦大头雪作者糕❦

来源数据分析与美国之美

目标

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

项目准备

软件:Pycharm

库:requests,fakerelative_useragent

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

网站分析

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

右边会显示并为下拉选择一般滚动条,然后发现,它是没有页码的,这样会自动打开加载者该网站的动态加载方式,或者还可以复制一个,Ctrl+U查看源代码,Ctrl+ f打开搜索框,把地址贴进去,会链接找不到这个链接,这样发现就确定加载链接了。

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

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

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

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

第一个: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_agent,产生随时进行访问的User-Agent请求头。

代码实现

1.导入相对应的继承库,定义一个类对象,定义init方法继承自己,主函数主继承自己。
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(1100):
            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文件/照片/

完整代码

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(1100):
            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()
<>< font="">g data-ratio="0.45689655172413796" data-type="gif" data-w="232" data-width="100%" style="display: block; box-sizing: border-box !important; overflow-wrap :断词!重要;明显性:明显!重要; 宽度:102 像素!重要;高度:47.6835 重要! " data-darkmode-original-color-16589727878938="#fff|rgb(0, 0, 0)" data-order= "0" src="//image109.360doc.com/DownloadImg/2022/07/ 2809/249386094_10_20220728094642647.gif" alt="图片"><>



在看点这里

好文分享给更多人↓↓

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
网络获取图片大小自适应
ios UITableView 异步加载图片并防止错位
详解iOS多图下载的缓存机制
django xadmin后台列表显示图片而不是url字符串
SDWebImage源码解析
Python3学习笔记:使用代理访问url地址 - Ken's blog - 开源中国社区
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服