分享

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

 昵称10087950 2022-07-28 发布于江苏

丨❦大头雪作者糕❦

来源数据分析与美国之美

目标

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

项目准备

软件:Pycharm

库:requests,fakerelative_useragent

网站地址:https : ///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./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./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="http://image109.360doc.com/DownloadImg/2022/07/ 2809/249386094_10_20220728094642647.gif" alt="图片"><>


图片

在看点这里图片好文分享给更多人↓↓

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多