用于Web提取的Python beautifulsoup在标签的实际页面加载之前加载数据

时间:2016-11-28 08:25:03

标签: python python-2.7 web-scraping beautifulsoup bs4

我正在使用此代码从链接https://website.grader.com/results/www.dubizzle.com

中删除一些数据

代码如下

#!/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我想在程序中提取负载?

1 个答案:

答案 0 :(得分: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()