Как я могу заставить lxml сохранить две страницы на страницах, чтобы они могли быть прочитаны деревом? - PullRequest
0 голосов
/ 09 мая 2019

Я анализирую информацию о списке топ-100 с сайта, который отслеживает крипто-цены на монеты топ-1000 или что-то подобное, используя xlml.Как я могу добавить вторую страницу к своему дереву на случай, если одна из моих 100 лучших, которые я отслеживаю, упадет ниже 100 и окажется на второй странице?Ссылка на мой код: https://github.com/cbat971/CoinScraping/blob/master/WebCrawl.py

Я пытался создать переменную "page2", добавить "," к переменной страницы, добавить "+" к переменной страницы.

from lxml import html
import requests
import datetime
import time

page = requests.get('https://coinmarketcap.com/', 'https://coinmarketcap.com/2')
tree = html.fromstring(page.content)

Если все 100 монет, которые у меня есть в списке, находятся на первой странице, это не проблема.Но как только человек попадает на вторую страницу, возникает ошибка, и монеты после этого не обрабатываются с помощью оператора for в конце.

1 Ответ

1 голос
/ 10 мая 2019

Вы можете попробовать объединить оба 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'} 
...