2016-11-28 8 views
0

м, используя этот код на слом некоторые данные по ссылке https://website.grader.com/results/www.dubizzle.comзадерживая питон BS4 HTML загрузки для загрузки HTML страницы веб-сайта, чтобы извлечь его

код, как показано ниже

#!/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 страницы, я думаю, что она загружает html предварительной загрузки ссылки, которая есть до 10-15 секунд.

Как я могу сделать паузу в коде и позволить ей загружать данные через 15 + секунд, поэтому правый html с тегами, которые я хочу извлечь из загрузки в программу?

кто-то рекомендовал мне использовать селен. Вот код, но не уверен, можно ли, если быть интегрирована в моем коде и служат целями

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

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

ответ

0

Может быть, есть некоторые ajax, и именно поэтому вы не получаете ожидаемый ответ Withe urllib. Селен является хорошим решением этой проблемы.

Для селена используют следующие:

import time 
from selenium import webdriver 
from selenium.webdriver.support.ui import WebDriverWait 
from bs4 import BeautifulSoup 

driver = webdriver.Firefox() 
driver.get(baseurl) 
time.sleep(15) 
html = driver.page_source 
soup = BeautifulSoup(html) 
+0

Спасибо, но я получаю сообщение об ошибке не модуль с именем Селен – info

+0

Я-то отсутствует? – info

+0

Похоже, вам удалось установить селен, но самая последняя версия селена (или, может быть, firefox?) Разбивает драйвер, и вам нужно установить его отдельно. Загрузите [здесь] (https://github.com/mozilla/geckodriver/releases), извлеките и поместите двоичный код где-нибудь на свой [путь] (https://en.wikipedia.org/wiki/PATH_ (переменная)) , – nathanielobrown