2016-09-18 4 views
1

Я хочу получать данные о осадках каждого дня с here.Получить содержимое веб-страницы (не из исходного кода)

Когда я нахожусь в inspect mode, я могу видеть данные. Однако, когда я просматриваю исходный код, я не могу его найти.

Я использую urllib2 и BeautifulSoup from bs4

Вот мой код:

import urllib2 
from bs4 import BeautifulSoup 
link = "http://www.hko.gov.hk/cis/dailyExtract_e.htm?y=2015&m=1" 

r = urllib2.urlopen(link) 
soup = BeautifulSoup(r) 
print soup.find_all("td", class_="td1_normal_class") 
# I also tried this one 
# print.find_all("div", class_="dataTable") 

И я получил пустой массив.

Мой вопрос: как я могу получить содержимое страницы, но не из исходного кода страницы?

ответ

1

Если вы не нашли div в источнике, это значит, что раздел который вы ищете, генерируется. Это может быть использование некоторых JS-структур, таких как Angular или JQuery. Если вы хотите просмотреть отображаемый HTML-код, вы должны использовать браузер, в котором содержится код JS.

Попробуйте использовать селен

How can I parse a website using Selenium and Beautifulsoup in python?

from bs4 import BeautifulSoup 
from selenium import webdriver 

driver = webdriver.Firefox() 
driver.get('http://www.hko.gov.hk/cis/dailyExtract_e.htm?y=2015&m=1') 

html = driver.page_source 
soup = BeautifulSoup(html) 

print soup.find_all("td", class_="td1_normal_class") 

Однако обратите внимание, что использование Selenium considerabily замедляет процесс, так как он должен потянуть обезглавленный браузер.

3

Если вы открываете инструменты dev на chrome/firefox и смотрите на запросы, вы увидите, что данные генерируются из запроса на http://www.hko.gov.hk/cis/dailyExtract/dailyExtract_2015.xml, который дает данные за все 12 месяцев, из которых вы можете извлечь их.

+0

Thats cool! Я думаю, что ваш метод более эффективен. Тем не менее, ответ @Simone Zandara больше подходит к вопросу, поэтому я выбираю это как правильные ans. – VICTOR