我试图获取废弃的网站数据时,一个表单提交了一个网址。例如,在我的表单上,如果我提交https://www.google.com,网站数据将被抓取。
我的实现是在Next.js中,它是API路由。以下是步骤:
1.我有一个前端表单:
import React from "react";
import { useState } from "react";
export default function InputURL() {
const [url, setUrl] = useState(null);
const handleSubmit = (e) => {
e.preventDefault();
fetch("/api/url", {
method: "post",
body: JSON.stringify(url),
});
};
return (
<div>
<form onSubmit={handleSubmit}>
<div>
<label>
URL
</label>
<input
onChange={(e) => setUrl(e.target.value)}
type="url"
/>
<button
type="submit">
Download
</button>
</div>
</form>
</div>
);
}
在表单提交时,url被发送到我的API routes文件/pages/api/url.js
进行处理。
1.我抓取网址,然后抓取数据
export async function getData(submittedUrl) {
const url = submittedUrl;
let results = {};
const performScrape = async (url) => {
///... scraping logic
return results;
};
return performScrape(url)
.then((results) => {
///... more scraping logic
return jsonData;
})
}
export default async function handler(req, res) {
const inputUrl = req.body;
const jsonData = await getData(inputUrl);
res.status(200).json(jsonData);
}
3. Now, in my home page, index.js, I call for the data returned to me from `url.js`:
````js
import React, { useState, useEffect } from "react";
import { getData } from "./api/url";
export default function Home({ scrappedJSON }) {
const scrappedWebsiteAxeData = JSON.parse(scrappedJSON);
return (
<main>
{scrappedWebsiteAxeData}
</main>
);
}
export async function getServerSideProps({ req }) {
const res = await getData(req?.body);
const data = JSON.stringify(res);
return { props: { axeJSON: data } };
}
然而,当我加载我的页面时,我得到一个错误Error: Error serializing
.axeJSON returned from
getServerSideProps in "/". Reason:
undefined cannot be serialized as JSON. Please use
null or omit this value.
,我相信这是因为用户没有提交URL。有没有一种方法可以等待用户在表单中提交一个URL,这样getServerSideProps就不会出错?
1条答案
按热度按时间xwbd5t1u1#
您可以执行此脚本:
我对Python不是很有经验,但这可能会解决你的问题。