爬取亚马逊招聘网站无动态数据返回,求解决方案
亚马逊招聘网站动态数据爬取解决方案
提取页面内嵌的JS变量数据
很多动态站点会把初始渲染需要的招聘数据直接内嵌在HTML的<script>标签里,而非通过XHR请求加载。你可以解析返回的HTML,定位包含数据的脚本标签,提取其中的JSON内容:import requests from bs4 import BeautifulSoup import json target_url = "https://www.amazon.jobs/en/search?base_query=&loc_query=" resp = requests.get(target_url) soup = BeautifulSoup(resp.text, "html.parser") # 遍历所有script标签,匹配包含招聘数据的内容 for script in soup.find_all("script"): if script.string and "jobSearch" in script.string: # 截取JSON格式部分,需根据实际内容调整匹配逻辑 json_start = script.string.find("{") json_end = script.string.rfind("}") + 1 job_data = json.loads(script.string[json_start:json_end]) print(job_data["jobs"]) # 根据实际结构提取对应字段 break用浏览器自动化工具渲染页面
如果数据是通过浏览器JS环境动态生成(无独立XHR请求),可以用Playwright或Selenium模拟完整浏览器加载流程,直接获取渲染后的DOM内容:from playwright.sync_api import sync_playwright from bs4 import BeautifulSoup with sync_playwright() as p: browser = p.chromium.launch(headless=True) page = browser.new_page() page.goto(target_url) # 等待招聘卡片元素加载完成 page.wait_for_selector(".job-tile") # 提取渲染后的页面HTML rendered_html = page.content() soup = BeautifulSoup(rendered_html, "html.parser") # 提取招聘信息 for job_card in soup.find_all("div", class_="job-tile"): print(job_card.find("h3").get_text(strip=True)) browser.close()匹配浏览器请求头与Cookie
亚马逊站点可能会验证请求的合法性,复制浏览器正常访问时的请求头(如User-Agent、Accept、Accept-Language)和Cookie,添加到你的爬虫请求中:headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8", "Accept-Language": "en-US,en;q=0.5", # 其他必要头信息从浏览器DevTools复制 } cookies = { # 从浏览器DevTools的Network面板复制Cookie键值对 } resp = requests.get(target_url, headers=headers, cookies=cookies)检查静态JSON资源
在浏览器正常加载页面时,查看Network面板的"All"标签,筛选.json后缀的请求,可能会找到存储招聘数据的静态JSON文件,直接请求该文件即可获取数据。
内容的提问来源于stack exchange,提问作者CodingChef
相关产品推荐
相关产品推荐

