如何用BeautifulSoup获取<a>标签内的动态属性及内容?
问题:无法获取动态添加的
cmp-ltrk属性 我尝试从目标HTML中获取“Apertura”,但始终无法成功。我了解到<a>标签原本没有“cmp-ltrk”属性,因此尝试先获取其父标签再访问该属性,但仍未成功。
尝试直接从<a>标签获取cmp-ltrk的代码:
url = "https://www.eldiario.es/" response = requests.get(url) soup = BeautifulSoup(response.text, "lxml") a_tags = soup.find_all("a") for i in a_tags: print(i)
输出结果:
<a class="item" href="https://www.eldiario.es/sociedad/educacion-no-recuperarse-recortes-pp-impuso-decreto-decada_1_9559396.html"> Educación </a>
从<h2>标签尝试的代码:
url = "https://www.eldiario.es/" response = requests.get(url) soup = BeautifulSoup(response.text, "lxml") a_tags = soup.find_all("h2", {"class": "ni-title"}) for i in a_tags: print(i)
输出结果类似:
<h2 class="ni-title bold"><a href="/sociedad/educacion-no-recuperarse-recortes-pp-impuso-decreto-decada_1_9559396.html">La Educación no consigue recuperarse de los recortes que el PP impuso por decreto hace una década</a></h2>
但始终看不到我要找的“cmp-ltrk”属性,也不知道如何访问它。需要说明的是,在两个循环中我尝试了所有针对i的方法(i.text、i.next等)。
解决方案
cmp-ltrk这类属性是页面加载后由JavaScript动态添加的,requests无法获取到。需要使用playwright/selenium(较简单的方案),或者选择js2py方案(较复杂)。——Barry the Platipus
以下代码可行:
df = pd.DataFrame(columns=["seccion","titulo","link","cmp"]) options = webdriver.ChromeOptions() options.add_argument('--headless') driver = webdriver.Chrome(chrome_options=options) url = "https://www.eldiario.es/" driver.get(url) page_source = driver.page_source soup = BeautifulSoup(page_source, "lxml") tags = soup.find_all("h2", {"class": "ni-title"}) for i in tags: l=[] i.a["href"] cmp = i.a["cmp-ltrk"] href = i.a["href"] if href.startswith("http"): link = href else: link = "https://www.eldiario.es{0}".format(i.a["href"]) titulo = i.text seccion = i.a["href"].split("/")[1] l.append([seccion,titulo,link,cmp]) df_ = pd.DataFrame(l,columns=["seccion","titulo","link","cmp"]) df = pd.concat([df,df_],axis=0)
内容的提问来源于stack exchange,提问作者Adrián Sánchez de la Sierra
相关产品推荐
相关产品推荐

