【发布时间】:2020-02-02 07:58:34
【问题描述】:
我正在学习网络抓取,因为我从真实网站抓取真实世界的数据。 然而,到目前为止,我从未遇到过此类问题。 通常可以通过右键单击网站的一部分然后单击检查选项来搜索想要的 HTML 源代码。我会马上跳到例子来解释这个问题。
从上图中,红色标记的 span 类最初不存在,但是当我将光标放在(甚至没有单击)用户名上时,会弹出一个该用户的小框,并且该 span 类也会显示.我最终想要抓取的是嵌入在该跨度类中的用户配置文件的链接地址。我不确定,但如果我可以解析该跨度类,我想我可以尝试抓取链接地址,但我保留无法解析隐藏的跨度类。
我没想到那么多,但我的代码当然给了我一个空列表,因为当我的光标不在用户名上时,跨度类没有出现。但是我展示我的代码来展示我所做的事情。
from bs4 import BeautifulSoup
from selenium import webdriver
#Incognito Mode
option=webdriver.ChromeOptions()
option.add_argument("--incognito")
#Open Chrome
driver=webdriver.Chrome(executable_path="C:/Users/chromedriver.exe",options=option)
driver.get("https://www.tripadvisor.com/VacationRentalReview-g60742-d7951369-or20-Groove_Stone_Getaway-Asheville_North_Carolina.html")
time.sleep(3)
#parse html
html =driver.page_source
soup=BeautifulSoup(html,"html.parser")
hidden=soup.find_all("span", class_="ui_overlay ui_popover arrow_left")
print (hidden)
是否有任何简单直观的方法来使用 selenium 解析隐藏的跨度类?如果我可以解析它,我可以使用“查找”函数来解析用户的链接地址,然后遍历所有用户以获取所有链接地址。 谢谢。
========================更新了问题,在下面添加================== =
要对我想要检索的内容添加一些更详细的解释,我想从下图中获取用红色箭头指向的链接。感谢您指出我需要更多解释。
===========================到目前为止更新的代码================= ====
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait as wait
from selenium.webdriver.support import expected_conditions as EC
#Incognito Mode
option=webdriver.ChromeOptions()
option.add_argument("--incognito")
#Open Chrome
driver=webdriver.Chrome(executable_path="C:/Users/chromedriver.exe",options=option)
driver.get("https://www.tripadvisor.com/VacationRentalReview-g60742-d7951369-or20-Groove_Stone_Getaway-Asheville_North_Carolina.html")
time.sleep(3)
profile=driver.find_element_by_xpath("//div[@class='mainContent']")
profile_pic=profile.find_element_by_xpath("//div[@class='ui_avatar large']")
ActionChains(driver).move_to_element(profile_pic).perform()
ActionChains(driver).move_to_element(profile_pic).click().perform()
#So far I could successfully hover over the first user. A few issues occur after this line.
#The error message says "type object 'By' has no attribute 'xpath'". I thought this would work since I searched on the internet how to enable this function.
waiting=wait(driver, 5).until(EC.element_to_be_clickable((By.xpath,('//span//a[contains(@href,"/Profile/")]'))))
#This gives me also a error message saying that "unable to locate the element".
#Some of the ways to code in Python and Java were different so I searched how to get the value of the xpath which contains "/Profile/" but gives me an error.
profile_box=driver.find_element_by_xpath('//span//a[contains(@href,"/Profile/")]').get_attribute("href")
print (profile_box)
另外,在这种情况下,有什么方法可以遍历 xpath 吗?
【问题讨论】:
-
所以您想知道如何在 selenium 中模拟“悬停”用户操作,以便弹出框元素出现在 DOM 中。请让您的问题更清楚,也许更具体。
-
要在弹出框中检索哪些数据?
-
@Yun 嗨,云。我刚刚更新了关于我要检索什么的问题。
-
@Adriano 我不知道有悬停功能,直到您提到它。谢谢你提出来。是的。我认为这会起作用,因为当我将光标放在用户的个人资料上时,popover 元素会出现。
-
这对您有帮助吗? stackoverflow.com/a/25003010/4603295
标签: python html selenium hover