2015-10-08 15 views
2

在这几天,我试图抓取雅虎答案网站,以采取在这category的问题。 我使用Scrapy来抓取动态网站的句柄,但使用Selenium。雅虎回答这真的是“无限滚动”页面?蟒蛇

经过许多尝试或方法,我每次获得不同的结果,第一次我想滚动所有的网站使用JS和当标签“加载...”消失停止向下滚动。 但我意识到加载停在不同的时刻。 其实我的代码是这样的:

time.sleep(5) 
    wait = WebDriverWait(self.driver, 10) 
     while True: 
      self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") 
      time.sleep(randint(4,6)) 
      self.driver.execute_script("window.scrollBy(0, -100000);") 
      time.sleep(randint(1,3)) 

      try: 
       wait.until(EC.visibility_of_element_located((By.ID, "ya-infinite-scroll-message"))) 
      except TimeoutException: 
       self.driver.get_screenshot_as_file("test_.jpg") 
       break 

,我可以得到很多的问题,但都没有,每次刮问题的数量变化。

回答

2

其实这是一条评论,但对于长度发布为答案!

我试着用硒和javascript测试this看看会发生什么。这对我来说是一样的。我尝试使用javascript scroll函数来滚动视图,但即使是来自不同白名单的ips和不同的web驱动程序也会得到相同的结果。这是我到目前为止所尝试的代码。

import time,random,time 
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 

driver = webdriver.Firefox() 

driver.get("https://answers.yahoo.com/dir/index/discover?sid=396545663") 

wait = WebDriverWait(driver, 10) 
wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "ul#ya-discover-tab"))) 

cntr = driver.find_element_by_xpath("//li[contains(@class,'Bfc')]") 
lst_scrlshgt = 0 
lngth = 0 
while True: 
    global lngth 
    topics = driver.find_elements_by_xpath("//li[@class='ya-discover-tile ya-discover-tile-qn Bfc P-14 Bdbx-1g Bgc-w']") 
    driver.execute_script("arguments[0].scrollIntoView();", topics[-1]) 
    time.sleep(random.choice(range(4,7))) 
    scrlshgt = driver.execute_script("return arguments[0].scrollHeight;", cntr) 
    if scrlshgt == lst_scrlshgt: 
     break 
    else: 
     last_scrlshgt = scrlshgt 
    lngth+=len(topics) 
    print lngth 





sample = driver.find_elements_by_xpath("//a[@class='Fz-14 Fw-b Clr-b Wow-bw title']") 
for i in sample: 
    print i.text.encode('utf-8') 

driver.quit() 

我觉得alecxelouis或其他人可以有一个更好的答案。

+0

您从中得到了多少个问题? – RedVelvet

+1

我发现最多2093年? – SIslam

+0

我发现约1200-1400 – RedVelvet