2016-11-28 11 views
0
Iリンクからいくつかのデータを廃棄するためにこのコードを用いたM

https://website.grader.com/results/www.dubizzle.comのPython beautifulsoupは

コードは

#!/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> 

問題: 問題は、ウェブサイトは、私がコードで述べたように抽出したいタグを持つHTMLソースファイルをロードするために周りに10-15秒かかることです。

コードで行のhtmlfile=urllib.urlopen(url).read()を使用してページのHTMLを読み込むと、10-15秒前にリンク先のHTMLの読み込みが行われると思います。

コードで一時停止して15秒以上経過してもデータを読み込ませるにはどうすればいいですか?

答えて

0

Selenium 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

ここでコードiを埋め込む必要がありますか? – info

+0

コードに埋め込みをお手伝いできますか? – info

+0

基本的にurllibをSelenium WebDriverに置き換えてGET URLにし、ページが読み込まれるまで待つ必要があります。見てください[ここ](http://selenium-python.readthedocs.io/waits.html) – user6399774