无法以正确的方式从网页收集标题

时间:2018-01-29 10:59:49

标签: python python-3.x selenium selenium-webdriver web-scraping

我已经在python中编写了一个与selenium结合使用的脚本,以便从网页中的某些图像中获取一些标题。问题是我要解析的内容位于该页面底部附近。所以,如果我尝试采用传统方式来抓取它,浏览失败。

所以,我在我的刮刀中使用了一个javascript代码让浏览器滚动到底部并且它有效。

然而,我并不认为这是一个很好的解决方案,可以跟上.scrollIntoView()这么努力,但这也没有用。什么是达到目的的理想方式?

这是我的剧本:

from selenium import webdriver
import time

URL = "https://www.99acres.com/supertech-cape-town-sector-74-noida-npxid-r922?sid=UiB8IFFTIHwgUyB8IzMxIyAgfCAxIHwgNyM0MyMgfCA4MjEyIHwjNSMgIHwg"
driver = webdriver.Chrome()
driver.get(URL)

driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") #I don't wish to keep this line
time.sleep(3)

for item in driver.find_elements_by_css_selector("#carousel img"):
    print(item.get_attribute("title"))
driver.quit()

2 个答案:

答案 0 :(得分:1)

尝试使用下面的代码,该代码应该允许您滚动到所需的节点并抓取图像:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

banks = driver.find_element_by_id("xidBankSection")
driver.execute_script("arguments[0].scrollIntoView();", banks)
images = WebDriverWait(driver, 5).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "#carousel img"))) 

for image in images:
    print(image.get_attribute("title"))

一些解释:最初这些图像在源代码中不存在,并且在滚动到BankSection内部后生成,因此您需要向下滚动到BankSection并等待直到生成图像

答案 1 :(得分:0)

您可以尝试以下代码行

recentList = driver.find_elements_by_css_selector("#carousel img"):

for list in recentList :
    driver.execute_script("arguments[0].scrollIntoView();", list )
     print(list.get_attribute("title"))