Найти - Пользователи
Полная версия: Парсинг. таблица
Начало » Python для новичков » Парсинг. таблица
1
Areostar
получил хтмл страницы:

 import urllib.request
fp = urllib.request.urlopen("https://www.globes.co.il/news/currencycontrols/currencyhistory.asp?Currency=USD&Month=1&Year=2000")
mybytes = fp.read()
mystr = mybytes.decode("windows-1255")
fp.close()
print(mystr)

на странице имеется таблица

Как мне выташить собержимое этой таблицы??
Areostar
пробывал так

 from lxml import html
tree = html.fromstring(mystr)
table = tree.xpath('//table')
print(tree.xpath('//table'))
for row in table[0]: print(row)

получаю чтото вроде
<Element tr at 0x3742e10>
<Element tr at 0x3742d80>
<Element tr at 0x3742e40>
<Element tr at 0x3742e10>
<Element tr at 0x3742d80>
<Element tr at 0x3742e40>
<Element tr at 0x3742e10>
<Element tr at 0x3742d80>

А как получить содержимое яцеек?
rami
Попробуйте так:
 from lxml import html
tree = html.fromstring(mystr)
table = tree.xpath('//table/tr/td')
for row in table:
    if row.text:
        print(row.text)
Areostar
перегнал в словарь:

 tree = html.fromstring(mystr)
table = tree.xpath('//table/tr/td')
usdList = []
usdDict = {}
for row in table:
    if row.text and row.text != 'שער' and row.text != 'תאריך':
        #print(row.text)
        usdList.append(row.text)
for  i in range(0, len(usdList)-1, 2):
    usdDict[usdList[i+1]] = usdList[i]
print(usdDict)
py.user.next
Сначала разделяешь на строки, потом из каждой строки берёшь столбцы
  
>>> import lxml.html
>>> 
>>> text = """
... <table>
... <tr><td>a</td><td>b</td></tr>
... <tr><td>c</td><td>d</td></tr>
... <tr><td>e</td><td>f</td></tr>
... </table>
... """
>>> 
>>> doc = lxml.html.fragment_fromstring(text)
>>> 
>>> out = [i.xpath('td/text()') for i in doc.xpath('//table/tr')]
>>> out
[['a', 'b'], ['c', 'd'], ['e', 'f']]
>>>
Почему не надо сразу столбцы брать - потому что в таблицах сами строки бывают разные по назначению и надо брать не все строки, а лишь некоторые. Где-то нужно провести дополнительные преобразования над строками, прежде чем брать столбцы из них. Но часто бывает так, что строки берёшь одним способом, а столбцы берёшь другим способом. Для этого и нужно разделение на этапы (сначала строки, потом столбцы).

Если же всё (и строки, и столбцы) берёшь одним способом, то ты сковываешь свои возможности. У тебя теряется вариативность применения разных методов, и ты обязан применять к столбцам те же методы парсинга, что и к строкам. Вот чтобы этой обязанности избежать, нужно поделить парсинг на два этапа.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB