无法抓取albonazionalegestoriambientali.it目标链接,代码在其他网站可用
问题原因
你用的URL里#后面的参数是前端路由参数,不会被发送到服务器。requests.get只能拿到页面的初始静态HTML,而你要的目标链接是页面加载后通过JavaScript动态渲染出来的,所以BeautifulSoup根本解析不到这些动态生成的内容——你可以打印grab.text看看,里面完全没有那些目标链接。
解决方案
有两种实用的处理方式:
方式一:直接调用数据接口(推荐)
打开浏览器F12开发者工具,切换到「Network」标签页刷新页面,能看到页面实际是通过API接口获取数据的。把原URL的#换成接口路径,就能直接请求到JSON格式的原始数据,不用解析HTML。
示例代码:
import requests # 替换成实际的接口地址 api_url = 'https://www.albonazionalegestoriambientali.it/Public/ElenchiIscritti/Elenco?tipoRicerca=2&paginaCorrente=1&risultatiPerPagina=50&sezione=3&provincia=BS&categoria=4-bis' response = requests.get(api_url) data = response.json() # 提取链接(根据接口返回的JSON结构调整字段名) with open("test1.txt", "w", encoding="utf-8") as f: for item in data.get('data', []): # 拼接完整链接(如果接口返回的是相对路径) full_link = f"https://www.albonazionalegestoriambientali.it{item.get('link', '')}" if full_link != "https://www.albonazionalegestoriambientali.it": f.write(full_link + "\n")
方式二:用Selenium模拟浏览器加载
如果找不到接口,就用Selenium模拟真实浏览器打开页面,等JavaScript执行完再解析渲染后的HTML。注意需要提前安装对应浏览器的驱动(比如ChromeDriver)。
示例代码:
from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from bs4 import BeautifulSoup url = 'https://www.albonazionalegestoriambientali.it/Public/ElenchiIscritti#tipoRicerca=2&paginaCorrente=1&risultatiPerPagina=50&sezione=3&provincia=BS&categoria=4-bis' # 初始化Chrome浏览器(需提前配置ChromeDriver) driver = webdriver.Chrome() driver.get(url) # 等待页面加载完成,确保目标元素已渲染 WebDriverWait(driver, 10).until( EC.presence_of_element_located(('tag name', 'a')) ) # 获取渲染后的页面源码 page_source = driver.page_source soup = BeautifulSoup(page_source, 'html.parser') # 提取并保存链接 with open("test1.txt", "w", encoding="utf-8") as f: for link in soup.find_all("a"): href = link.get('href') if href: f.write(href + "\n") # 关闭浏览器 driver.quit()
内容的提问来源于stack exchange,提问作者Niccolo' Tomassini
相关产品推荐
相关产品推荐

