2016-11-28 26 views
0

我米使用此代码从链接再杀一些数据https://website.grader.com/results/www.dubizzle.com的Python beautifulsoup用于web取出负载数据标签负载的实际页面之前

的代码如下

#!/usr/bin/python 
import urllib 
from bs4 import BeautifulSoup 
from dateutil.parser import parse 
from datetime import timedelta 

import MySQLdb 
import re 
import pdb 
import sys 
import string 

def getting_urls_of_all_pages(): 
    url_rent_flat='https://website.grader.com/results/dubizzle.com' 
    every_property_in_a_page_data_extraction(url_rent_flat) 


def every_property_in_a_page_data_extraction(url): 

    htmlfile=urllib.urlopen(url).read() 
    soup=BeautifulSoup(htmlfile) 

    print soup 

    Sizeofweb="" 
    try: 

     Sizeofweb= soup.find('span', {'data-reactid': ".0.0.3.0.0.3.$0.1.1.0"}).text 
     print Sizeofweb.get_text().encode("utf-8") 

    except StandardError as e: 
     error="Error was {0}".format(e) 
     print error 

getting_urls_of_all_pages() 

的那部分HTML对此我提取是如下

快: https://www.dropbox.com/s/7dwbaiyizwa36m6/5.PNG?dl=0

代码:

<div class="result-value" data-reactid=".0.0.3.0.0.3.$0.1.1"> 
<span data-reactid=".0.0.3.0.0.3.$0.1.1.0">1.1</span> 
<span class="result-value-unit" data-reactid=".0.0.3.0.0.3.$0.1.1.1">MB</span> 
</div> 

问题: 问题是,该网站大约需要10-15秒加载其具有我想提取在代码中提到的代码的HTML源文件。

当代码使用行htmlfile=urllib.urlopen(url).read()加载页面的html,我认为它加载了10-15秒之前链接的预加载html。

如何在代码中暂停并让它在15+秒之后加载数据,以便正确的html与标记我想要在程序中提取负载?

回答

0

使用硒WebDriver将解决您的问题。具体来说,它有一种方法可以从指定的秒数等待进一步处理。像下面的东西应该工作。

from selenium import webdriver 
from selenium.webdriver.support.ui import WebDriverWait 

driver = webdriver.Firefox() 
driver.get(baseurl) 

try: 
    wait = WebDriverWait(driver, 60) 
    element = wait.until(
     ec.element_to_be_clickable(...) 
    ) 
finally: 
    driver.quit() 
+0

哪里在代码我应该嵌入它? – info

+0

你能帮忙试图嵌入代码吗? – info

+0

基本上你必须用Selenium WebDriver替换urllib来获取url并等待页面加载。看看[这里](http://selenium-python.readthedocs.io/waits.html) – user6399774