使用 Cloudflare Workers 实现提取网页所有链接的 API 代码示例

ChatGPT4o 使用 ChatGPT 4o 回答

问题:

我想用 Cloudflare 的 Workers 实现一个 API ,输入参数是一个 URL ,输出这个 URL 对应页面上的所有链接 URL 。 请帮我实现代码。

回答:

当然可以!Cloudflare Workers 是一个强大的平台,可以用来构建各种类型的 API。你可以使用 JavaScript 来实现这个功能。以下是一个简单的示例代码,它会接受一个 URL 作为输入,并返回该页面上所有链接的 URL。

首先,你需要在 Cloudflare Workers 中创建一个新的 Worker,然后将以下代码粘贴到你的 Worker 脚本中:

addEventListener('fetch', event => {
  event.respondWith(handleRequest(event.request))
})

async function handleRequest(request) {
  const { searchParams } = new URL(request.url)
  const targetUrl = searchParams.get('url')

  if (!targetUrl) {
    return new Response('URL parameter is required', { status: 400 })
  }

  try {
    const response = await fetch(targetUrl)
    const html = await response.text()
    const links = extractLinks(html, targetUrl)
    return new Response(JSON.stringify(links), {
      headers: { 'Content-Type': 'application/json' }
    })
  } catch (error) {
    return new Response('Error fetching the URL', { status: 500 })
  }
}

function extractLinks(html, baseUrl) {
  const parser = new DOMParser()
  const doc = parser.parseFromString(html, 'text/html')
  const linkElements = doc.querySelectorAll('a')
  const links = []

  linkElements.forEach(link => {
    let href = link.getAttribute('href')
    if (href) {
      // Resolve relative URLs
      href = new URL(href, baseUrl).href
      links.push(href)
    }
  })

  return links
}

代码解释:

  1. 事件监听器addEventListener('fetch', event => { ... }) 用于监听传入的 HTTP 请求。
  2. 处理请求handleRequest 函数处理���入的请求,提取 URL 参数,并尝试获取该 URL 的内容。
  3. 提取链接extractLinks 函数使用 DOMParser 解析 HTML 文本,并提取所有 <a> 标签的 href 属性。
  4. 返回结果:将提取到的链接以 JSON 格式返回。

使用方法:

  1. 部署你的 Worker。
  2. 访问你的 Worker,并在 URL 中传递你想要解析的页面 URL。例如:
    https://your-worker-url.example.com/?url=https://example.com
    

这样,Worker 会返回 https://example.com 页面上所有链接的 URL。

注意事项:

  • 这个示例代码没有处理很多边缘情况,比如重定向、错误页面、不同的 HTML 结构等。你可能需要根据实际情况进行调整。
  • 解析 HTML 并提取链接可能会受到目标页面的反爬虫机制影响。
  • 确保你遵守目标网站的使用条款和隐私政策。

希望这个示例对你有帮助!如果你有任何问题或需要进一步的帮助,请随时