使用beautifulsoup在标签中的类之间获取文本

时间:2019-03-14 08:08:11

标签: html python-3.x beautifulsoup

我正在用python学习beuatifulSoup,但我不明白为什么我的代码无法正常工作。 我正在尝试在HTML代码的这一部分中获取文本“我的心情”:

<div class="page_block_header_inner _header_inner"><a class="ui_crumb" 
 href="/lovely_detka_tytyty" onclick="return nav.go(this, event, {back: 
 true});">my mood</a><div class="ui_crumb_sep"></div><a class="ui_crumb" 
 href="/albums-68872445" onclick="return nav.go(this, event, {back: true});

我的代码是

from bs4 import BeautifulSoup
import requests
import lxml
url = 'https://vk.com/photo-68872445_422126739?rev=1'
req = requests.get(url)
soup = BeautifulSoup(req.text, 'lxml')


for row in soup.find_all('div',attrs={"class" : "ui_crumb"}):
    print (row.text)

但是我的代码不起作用,我收到一个空白字符串。你有什么想法吗?

2 个答案:

答案 0 :(得分:0)

您可以尝试以下类选择器

print(soup.select_one('.group_link').text)

requests似乎挂起,因此也可以使用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

url = 'https://vk.com/photo-68872445_422126739'
driver = webdriver.Chrome()
driver.get(url)
item =  WebDriverWait(driver,10).until(EC.presence_of_element_located((By.CSS_SELECTOR, ".group_link"))).text
print(item)
driver.quit()

答案 1 :(得分:0)

您尝试获取的文本位于锚标记上,并且正在查找div标签。

<a class="ui_crumb" href="/lovely_detka_tytyty" onclick="return nav.go(this, event, {back: true});">my mood</a>

是您要尝试找到的

for row in soup.find_all('a', class_="ui_crumb")

可能会更好地工作。

此外,在请求中定义标头将确保返回您期望的页面版本,而没有标头的服务器可能会返回您不期望的页面。

对于此页面的某些版本,您要查找的实际标签是:

<a href="/lovely_detka_tytyty">my mood</a>

您更有可能通过

找到的
for row in soup.find_all('a', href=True, class_=False):
    print(row.get_text())