python-3.x - 如何从python中的多次重定向url中获取目标url?
问题描述
我正在尝试制作一个网络刮板。我想从查询 URL 中获取目标 URL。但它会重定向很多次。
这是我的网址:
https://data.jw-api.org/mediator/finder?lang=INS&item=pub-jwb_201812_16_VIDEO
目标网址应为:
https://www.jw.org/ins/library/videos/#ins/mediaitems/VODOrgLegal/pub-jwb_201812_16_VIDEO
但我将https://www.jw.org/ins/library/videos/?item=pub-jwb_201812_16_VIDEO&appLanguage=INS
其作为重定向的 URL。
我试过这段代码:
import requests
url = 'https://data.jw-api.org/mediator/finder?lang=INS&item=pub-jwb_201812_16_VIDEO'
s = requests.get(url)
print(s.url)
解决方案
重定向是使用 JavaScript 进行的
它不是服务器重定向,因此请求不会跟随它。
您可以使用 Selenium 获取 URL
from selenium import webdriver
import time
browser = webdriver.Chrome()
url = 'https://data.jw-api.org/mediator/finder?lang=INS&item=pub-jwb_201812_16_VIDEO'
browser.get(url)
time.sleep(5)
print (browser.current_url)
browser.quit()
输出
https://www.jw.org/ins/library/videos/#ins/mediaitems/VODOrgLegal/pub-jwb_201812_16_VIDEO
如果您正在构建刮板,我建议您查看 scrapy-splash https://github.com/scrapy-plugins/scrapy-splash或 requests-html https://github.com/psf/requests-html
推荐阅读
- javascript - 无法创建新帖子 (API)
- sql - 参数类型'AsyncSnapshot
- reactjs - “依赖项安装错误”:Netlify 是否要求使用以前版本的节点来部署站点?
- swift - SwiftUI:SIGABRT 涉及不相关的组件(WatchConnectivity、AppStorage、Foreach 等)
- python - 在 aws 24x7 上运行多个 python 文件
- node.js - 使用 expressjs 导入错误设置 Typescript
- c# - 并行任务执行与 Thread.Sleep 有问题
- google-chrome-extension - WebExtension API:打开/关闭 DOM 替换
- java - 与模拟器和实时手机相关的android studio问题
- django - 在 django 模型中为复制对象创建函数