使用Python Requests爬取网页仅获部分内容,无法提取章节数求助
问题分析与解决办法
核心原因
你遇到的问题是因为目标网站的内容是JavaScript动态渲染的:
requests库只能获取服务器直接返回的静态HTML源码,而页面里的漫画章节信息是浏览器加载页面后,通过JavaScript动态生成并插入到#manga-mobile-app容器中的。- 所以你用
requests拿到的页面里,这个容器自然是空的,找不到对应的子元素。
解决方法
方法一:用浏览器自动化工具模拟加载(推荐)
可以用Selenium或Playwright这类工具,模拟真实浏览器的加载过程,等JS渲染完成后再获取页面内容。
以Selenium为例,代码示例:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from bs4 import BeautifulSoup url = "https://mangaabyss.com/read/the-god-of-pro-wrestling/" # 初始化浏览器(需提前安装对应浏览器的驱动,如ChromeDriver) driver = webdriver.Chrome() driver.get(url) # 等待目标元素加载完成,超时10秒 try: # 等待章节数元素出现 WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CSS_SELECTOR, "#manga-mobile-app > div > div.comic-info-component > div.page-normal.with-margin > div.comic-deatil-box.tab-content.a-move-in-right > div.comic-episodes > div.episode-header.f-clear > div.f-left > span")) ) # 获取渲染后的页面源码 page_source = driver.page_source soup = BeautifulSoup(page_source, 'html.parser') # 提取章节数 chapter_count = soup.select_one("#manga-mobile-app > div > div.comic-info-component > div.page-normal.with-margin > div.comic-deatil-box.tab-content.a-move-in-right > div.comic-episodes > div.episode-header.f-clear > div.f-left > span").text print(chapter_count) finally: driver.quit()
方法二:抓包获取API接口
打开浏览器开发者工具(F12),切换到Network标签,刷新页面,筛选XHR/fetch类型的请求,查找直接返回章节信息的API接口。如果能找到,直接用requests请求该接口,效率比模拟浏览器更高。
比如,你可以在请求列表中搜索包含章节相关关键词的条目,找到对应的API地址后,构造请求获取数据即可。
内容的提问来源于stack exchange,提问作者MCUxDaredevil
相关产品推荐
相关产品推荐

