首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从动态加载的页面(无限滚动)中刮取web内容

问从动态加载的页面(无限滚动)中刮取web内容
EN

Stack Overflow用户
提问于 2022-07-11 20:21:47
回答 1查看 134关注 0票数 0

我试图从这个网站收集所有的图片文件名:https://www.shipspotting.com/

我已经收集了一个python cat_dict中的所有类别名称和它们的id号。所以我的策略是遍历每个类别页面,调用数据加载API并保存每个页面的响应。

我已经将https://www.shipspotting.com/ssapi/gallery-search标识为请求URL,它加载下一页内容。但是,当我使用请求库请求这个URL时,我会得到一个404。在加载下一页内容时,我需要做什么才能获得正确的响应?

代码语言:javascript
复制
import requests
from bs4 import BeautifulSoup

cat_page = 'https://www.shipspotting.com/photos/gallery?category='

for cat in cat_dict:
   cat_link = cat_page + str(cat_dict[cat])
   headers = {
   "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:96.0) Gecko/20100101 Firefox/96.0",
   "Referer": cat_link
}

   response = requests.get('https://www.shipspotting.com/ssapi/gallery-search', headers=headers)
   soup = BeautifulSoup(response.text, 'html.parser')

https://www.shipspotting.com/photos/gallery?category=169是一个示例页面(cat_link)

EN

回答 1

Stack Overflow用户

发布于 2022-07-11 20:58:58

您的认证url包含通过API作为post方法的数据,无穷滚动使下一页意味着从api的有效负载数据分页。

工作代码和响应200

代码语言:javascript
复制
import requests

api_url= 'https://www.shipspotting.com/ssapi/gallery-search'
headers={'content-type': 'application/json'}
payload= {"category":"","perPage":12,"page":1}

for payload['page'] in range(1,7):
    res=requests.post(api_url,headers=headers,json=payload)
    for item in res.json()['items']:
        title=item['title']
        print(title)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72944242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档