2015-07-26 3 views
0

Я пытаюсь написать простое приложение, которое читает HTML с веб-страницы, преобразует его в строку и отображает определенные фрагменты этой строки пользователю. Однако, кажется, эти кусочки меняются! Каждый раз, когда я запускаю свой код, я получаю отличный результат! Вот код.Использование urllib с Python 3

# import urllib so we can get HTML source 
from urllib.request import urlopen 
# import time, so we can choose which date to read from 
import time 


# save HTML to a variable 
content = urlopen("http://www.islamicfinder.org/prayerDetail.php?country=canada&city=Toronto&state=ON&lang") 

# make HTML readable and covert HTML to a string 
content = str(content.read()) 

# select part of the string containing the prayer time table 
table = content[24885:24935] 

print(table) # print to test what is being selected 

Я не уверен, что здесь происходит.

+0

Было бы лучше использовать библиотеку, которая анализирует html и может извлечь конкретный элемент, такой как таблица, основанная на его свойствах. beautifulsoup является одним из таких парсеров для python. Он доступен по адресу https://pypi.python.org/pypi/beautifulsoup4, и есть возможность использовать его для извлечения таблицы по адресу http://stackoverflow.com/questions/11790535/extracting-data-from-html-table , Использование его с http://www.islamicfinder.org/prayerDetail.php будет более сложным, поскольку источник просмотра показывает, что он не присваивает класс таблицам, а также их гнездится, но он присваивает один и тот же класс всем элементам td. –

ответ

0

Вы не должны искать часть, которую вы хотите, захватывая конкретные показатели списка, веб-сайты часто динамичны и список содержит тот же контент каждый раз

То, что вы хотите сделать, это поиска для таблицы вы хотите, так сказать стол начал с ключевым словом class="prayer_table" вы могли бы найти это с str.find()

еще лучше, извлечь таблицы из веб-страницы вместо того, чтобы полагаться на str.find() код ниже от вопроса о таблицах выписки с веб-страницы reference

from lxml import etree 
import urllib 

web = urllib.urlopen("http://www.ffiec.gov/census/report.aspx?year=2011&state=01&report=demographic&msa=11500") 
s = web.read() 

html = etree.HTML(s) 

## Get all 'tr' 
tr_nodes = html.xpath('//table[@id="Report1_dgReportDemographic"]/tr') 

## 'th' is inside first 'tr' 
header = [i[0].text for i in tr_nodes[0].xpath("th")] 

## Get text from rest all 'tr' 
td_content = [[td.text for td in tr.xpath('td')] for tr in tr_nodes[1:]] 
1

Вы действительно должны использовать что-то вроде прекрасного супа. Что-то в этом отношении должно помочь. Исходя из исходного кода для этого URL-адреса, для таблицы нет id/class, что делает его более сложным для поиска.

from bs4 import BeautifulSoup 
import requests 

url = "http://www.islamicfinder.org/prayerDetail.php?country=canada&city=Toronto&state=ON&lang" 
r = requests.get(url) 
soup = BeautifulSoup(r.text) 

for table in soup.find_all('table'): 
    # here you can find the table you want and deal with the results 
    print(table) 
Смежные вопросы