我正在尝试将此网页抓取->
HTML具有带有类的div标签。在这个div标签中,还有另一个div标签,还有另一个p标签,没有类。我的目标是专门获取没有类的孤独p标签,并从中获取文本数据。
到目前为止,这是我的代码->
我未在代码中包含某些导入内容和其他部分。
html = driver.page_source
time.sleep(.1)
soup = bs.BeautifulSoup(html, 'lxml')
time.sleep(.1)
Class_Details = soup.find_all("div", {"class":"row-fluid data_row primary-row class-info class-not-checked"})
for class_detail in Class_Details:
Class_status = class_detail.find_all("div", {"class":"statusColumn"})
Status = Class_status[0].text
class_date = class_detail.find_all("p",{"class":"hide-above-small beforeCollapseShow"})
class_time = class_date[0].text
The 4 lines above can be ignored they work and accomplish their tasks, the lines below however do not and is what I am asking.
cla = class_detail.find_all("p",{"class":"timeColumn"})
print(cla)
The Output of print(cla) is
[]
[]
[]
[]
[]
[]
[]
好处是,有7个空列表与网站一致,因此它肯定是在计数/检测到我要抓取的零件,但是我需要将输出作为文本。
我希望我的问题很清楚,谢谢您的宝贵时间。
答案 0 :(得分:2)
不打印输出的原因是因为您尝试打印元素,而不是元素文本。您应该将代码更改为以下内容:
cla = class_detail.find_all("p",{"class":"timeColumn"})
for item in cla:
print(item.text)
我知道您正在使用BeautifulSoup,但是如果您找不到自己喜欢的BS实现,我还将提供使用Selenium / XPath的解决方案:
elements_list = driver.find_elements_by_xpath("//div[@class='timeColumn'/p]")
for element in elements_list:
print(element.text)
答案 1 :(得分:1)
要获取不带类的 p 标签,请使用.timeColumn p:not([class])
选择器:
# select_one to get first one
p_no_class = class_detail.select_one(".timeColumn p:not([class])").text
print(p_no_class)
# select to get all
all_p_no_class = class_detail.select(".timeColumn p:not([class])")
for p in all_p_no_class:
print(p.text)
答案 2 :(得分:0)
所需元素是启用了JavaScript的元素,因此要提取文本 7:45 am-10:50am ,您需要为其诱导 WebDriverWait visibility_of_element_located()
,则可以使用以下Locator Strategies中的任何一个:
使用XPATH
:
print(WebDriverWait(driver, 30).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "//div[@class='timeColumn']/div[contains(@id, 'days_data')]/p/a[@class='popover-bottom' and text()='F']//following::p[1]"))).text)
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC