Вы можете попробовать объединить оба HTML, используя
page1.content + page2.content
, но это не сработает, потому что lxml
ожидает только одну <html>
и одну <body>
, и он будет анализировать только первую страницу и пропускать другие страницы..
Запустите код, и вы получите только один `
from lxml import html
import requests
page1 = requests.get('https://coinmarketcap.com/')
page2 = requests.get('https://coinmarketcap.com/2')
tree = html.fromstring(page1.content + page2.content)
print(tree.cssselect('body'))
Вы должны обрабатывать каждую страницу отдельно - читать, анализировать и получать значения из HTML - и добавлять результаты водин список / словарь
Этот код дает два <body>
from lxml import html
import requests
for url in ('https://coinmarketcap.com/', 'https://coinmarketcap.com/2'):
page = requests.get(url)
tree = html.fromstring(page.content)
print(tree.cssselect('body'))
РЕДАКТИРОВАТЬ:
from lxml import html
import requests
data = {
'BTC': 'id-bitcoin',
'TRX': 'id-tron',
# ...
'HC': 'id-hypercash',
'XZC': 'id-zcoin',
}
all_results = {}
for url in ('https://coinmarketcap.com/', 'https://coinmarketcap.com/2'):
page = requests.get(url)
tree = html.fromstring(page.content)
print(tree.cssselect('body'))
for key, val in data.items():
result = tree.xpath('//*[@id="' + val + '"]/td[4]/a/text()')
print(key, result)
if result:
all_results[key] = result[0]
print('---')
print(all_results)
Результат:
[<Element body at 0x7f6ba576cd68>]
BTC ['$6144.33']
TRX ['$0.023593']
HC []
XZC []
[<Element body at 0x7f6ba57fb4f8>]
BTC []
TRX []
HC ['$1.05']
XZC ['$6.25']
---
{'BTC': '$6144.33', 'TRX': '$0.023593', 'HC': '$1.05', 'XZC': '$6.25'}