鱼C论坛

 找回密码
 立即注册
查看: 4650|回复: 37

[作品展示] 瀑布流和Ajax动态加载数据之花瓣网

[复制链接]
发表于 2019-5-9 03:48:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 Stubborn 于 2019-5-9 04:02 编辑

有鱼友说想要知乎和花瓣的爬虫教程,前面发了知乎,这里补上花瓣的。我懒得写教程了,骂我吧

鱼油有爬不下来的网站可以留言,会选择感兴趣的网址发一个教程。已经在淘贴有类似的网址就不用发了~

这里补充下>>>踩点时候发现花瓣是采用的瀑布流和Ajax动态加载数据

>>>瀑布流:参差不齐的多栏布局以及到达底部自动加载的方式
>>>Ajax动态加载数据:在不重新加载整个网页的情况下,对网页的某部分进行更新
图片通过JS加载成瀑布流的形式,当到达底部后,会请求后台拿到更多的数据,解析后通过Ajax,可以在不关闭不转跳不刷新浏览器的情况下部分更新页面内容。
既然会向后台请求数据那么好办,我们直接向后台请求数据不就得了。
废话不多说,贴代码

游客,如果您要查看本帖隐藏内容请回复

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
RIXO + 5 + 5 + 3 居然出贴啦,支持一下!

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-5-9 06:37:52 From FishC Mobile | 显示全部楼层
厉害
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-5-9 07:06:50 From FishC Mobile | 显示全部楼层
chrome能搞定不,?
这异步加载,没有教程,真担心看不懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-9 08:59:03 | 显示全部楼层
self.url = 'https://huaban.com/boards/481662/?jvetal98&max={pin_id}&limit=20&wfl=1'

这句我再源码里只能找到'https://huaban.com/boards  后面的481662 就找不到了 但是有其他一些类似数据
不知道这个数据是否是总在变化的 以及后面部分/?jvetal98&max={pin_id}&limit=20&wfl=1 都是咋拼接的
不太清楚

还有:test.run(pin='2363573713')  这里的2363573713 是神马乌,咋来的,干啥用的 不清楚
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-9 09:57:27 | 显示全部楼层
学习呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-9 10:06:49 | 显示全部楼层
okok
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-5-9 13:01:09 | 显示全部楼层
wp231957 发表于 2019-5-9 08:59
self.url = 'https://huaban.com/boards/481662/?jvetal98&max={pin_id}&limit=20&wfl=1'

这句我再源码 ...

发帖前面就说过了,图片通过JS加载成瀑布流的形式,当到达底部后,会请求后台拿到更多的数据,你往下面翻的时候,突然给你刷新很多的图片出来,你再找找,就有这个请求的,2363573713 这个是图片的id,点击图片进去,就可以看到每个图片有不一样的id
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-9 13:04:35 From FishC Mobile | 显示全部楼层
Stubborn 发表于 2019-5-9 13:01
发帖前面就说过了,图片通过JS加载成瀑布流的形式,当到达底部后,会请求后台拿到更多的数据,你往下面翻 ...

一个chrome就可以吗
我早上发了一个贴,被关监狱里了,现在还没有放出来呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-9 13:21:28 | 显示全部楼层
wp231957 发表于 2019-5-9 13:04
一个chrome就可以吗
我早上发了一个贴,被关监狱里了,现在还没有放出来呢

dui
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-9 14:42:53 | 显示全部楼层
学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-5-10 16:03:15 | 显示全部楼层
向大神学习,我抄一遍!!
# -*- coding: utf-8 -*-
# @Time    : 2019-05-08 02:47
# @Author  : Ein
# @File    : 花瓣网.py
# @Software: PyCharm

import requests
import json
import time

class RequestsHuaban:

    def __init__(self):

        self.url = 'https://huaban.com/boards/481662/?jvetal98&max={pin_id}&limit=100&wfl=1'
        self.session = requests.Session()
        self.path = r'/Users/sstubborn/Desktop/jpg'+'/' #设置你的下载路径

    def callback(self,function,*parameter):
        function(*parameter)

    def run(self,pin):
        url = self.url.format(pin_id=pin)
        text= self.session.get(url=url).text
        time.sleep(5)
        json_data = text.split('["board"] = ')[1].split(';\napp._csr',)[0]
        data = json.loads(json_data)
        pinsList = data['pins']
        item = {}

        for pin_id in pinsList:
            item['pin_id'] = pin_id['pin_id']
            item['url'] = 'https://hbimg.huabanimg.com/' + pin_id['file']['key'] + '_fw658'
            self.callback(self.download,item['url'],item['pin_id'])
        self.callback(self.run, item['pin_id'])


    def download(self,url,id):
        response = self.session.get(url=url).content
        path = self.path + str(id) + '.jpg'
        with open(path,'wb') as fp:
            fp.write(response)

if __name__ == '__main__':
    test = RequestsHuaban()
    test.run(pin='2363573713')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-14 10:15:54 | 显示全部楼层
红色框里的长串数字 是如何获取的呢  麻烦指点一下
批注 2019-05-14 101447.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-14 11:36:51 | 显示全部楼层
wp231957 发表于 2019-5-14 10:15
红色框里的长串数字 是如何获取的呢  麻烦指点一下

你看我的翻页,就是这个pin_id
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-14 14:26:04 | 显示全部楼层
翻页那部分代码还是没有看明白,类代码我实在是有些看不懂
我翻译了你的大部分代码  现在能成功的下载一部分图片,麻烦你把翻页部分给我补上
我看看 到底是咋翻的
#coding: utf-8 
from lxml import etree
import requests,json


     



if __name__ == '__main__':
    pin='2363573713'
    path=r"e:\pic\"
    url= 'https://huaban.com/boards/481662/?jvetal98&max=%s&limit=20&wfl=1'%pin
    tree = etree.HTML(requests.get(url=url).text)
    json_data = tree.xpath('/html/body/script[1]/text()')[0].split('["board"] = ',1)[1].split(';\napp._csr = true',1)[0]
    data = json.loads(json_data)
    pinsList = data['pins']
    item = {}
    for pin_id in pinsList:
       item['pin_id'] = pin_id['pin_id']
       item['url'] = 'https://hbimg.huabanimg.com/' + pin_id['file']['key'] + '_fw658'
       #下载
       response = requests.get(url=item['url']).content
       fpath = path + str(item['pin_id']) + '.jpg'
       with open(fpath,'wb') as fp:
          fp.write(response)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-14 15:17:30 | 显示全部楼层
wp231957 发表于 2019-5-14 14:26
翻页那部分代码还是没有看明白,类代码我实在是有些看不懂
我翻译了你的大部分代码  现在能成功的下载一部 ...

19行,for循环完毕,继续拿item['pin_id'],拼接请求,继续13行的代码操作
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-25 19:15:09 | 显示全部楼层
看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-5-25 22:51:02 | 显示全部楼层
6666
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-5-26 15:51:19 | 显示全部楼层
看代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-30 18:01:09 | 显示全部楼层
111
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-6-16 14:44:25 | 显示全部楼层
你的头像让我无法学习了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-17 03:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表