鱼C论坛

 找回密码
 立即注册
查看: 3217|回复: 1

[技术交流] 花瓣网解析

[复制链接]
发表于 2020-3-1 20:28:17 | 显示全部楼层 |阅读模式

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

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

x
这是一个动态加载的网页
它的静态内容几乎没啥内容
所以:
1、静态解析的工具全部不能用,包括lxml   bs4 / XPATH 正则  等等
2、分析了很长时间很长时间,发现这个网站几乎都是用json在传送数据
3、今天看了一个视频,他里面是用正则去解析网页源码中的<script>......</script> 之间的内容,然后提取相关的key 这个key值就是图片原型
     可是他的弊端太明显了,根本就爬不了几张图片
4、期间又做了一件蠢事,我幻想着,在自己的本地HTML中 向花瓣服务器发送请求,然后它返给我数据,我就能接收到了,结果呢,你们猜
好了,先上图片
ere.png

评分

参与人数 1荣誉 +2 鱼币 +2 贡献 +2 收起 理由
LuckyTiger66 + 2 + 2 + 2 鱼C有你更精彩^_^

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-1 20:39:42 | 显示全部楼层
  1. import requests
  2. import json

  3. i=0
  4. pin="237967229"     #起始pin  需要F12自己慢慢发现
  5. while True:
  6.     params={
  7.         "k78u7sws": "",
  8.         "max": pin,
  9.         "limit": "20",
  10.         "wfl": "1"
  11.        }
  12.     headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3947.100 Safari/537.36",
  13.               "X-Request": "JSON",                    #这里困扰了我好久好久,具体为,明明服务器返回的是json数据,可是我get到的就是主页那点静态代码
  14.               "X-Requested-With": "XMLHttpRequest"}   #后来我加了这两个参数,也不知道哪个起了作用,能接到json数据了
  15.               
  16.     url="https://huaban.com/explore/shuixiasheying"   #网站有很多系列,我这里选择了水下摄影子页面
  17.     response=requests.get(url=url,params=params,headers=headers)     #get方式 需要传参一定是params
  18.     jsondata=(response.json())                #注意,我在这里卡顿了很久很久,因为接不到json数据 你直接这样用  会报错
  19.     if len(jsondata["pins"])<=0:break         #瀑布流  鼠标拉到最下端 没有新的图片了,pins长度为0 结束循环
  20.     for x in range(len(jsondata["pins"])):
  21.         imgurl="https://hbimg.huabanimg.com/"+jsondata["pins"][x]["file"]["key"]     #这个jsondata["pins"][x]["file"]["key"] 狠关键,所有分析,都是为了寻找这个key 图片的原型
  22.         i+=1
  23.         imgcontent=requests.get(imgurl)
  24.         with open(r'/pic/水下摄影/'+jsondata["pins"][x]["file"]["key"]+",jpg", 'wb') as file:
  25.             print("正在下载第%d张图片,文件名为%s"%(i,jsondata["pins"][x]["file"]["key"]))
  26.             file.write(imgcontent.content)
  27.     pin= jsondata["pins"][-1]["pin_id"]   #构建下次循环(也就是下一页)
  28. print("水下摄影共有%d张图片被下载"%i)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-8 18:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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