Найти элемент по XPATH через L XML - Python - PullRequest
1 голос
/ 25 апреля 2020

У меня возникли проблемы с очисткой некоторых веб-данных с использованием L XML. Я хочу соскрести одну вещь с веб-сайта, используя BeautifulSoup, поэтому я решил, что я бы go с L XML. Я написал некоторый код и получил бот Discord для доступа к сайту. Теперь осталось только найти код для поиска этих элементов. Вот мой код, помощь будет оценена.

@tasks.loop(seconds = 10)
    async def exchangeRate(self):
        print("Loop Starting!")
        HEADERS = {
            'User-Agent' : "Magic Browser"
        }

        url = 'https://rubyrealms.com/economy/bank'

        async with aiohttp.request("GET", url, headers=HEADERS) as response:
            if response.status == 200:
                #Scrap page content into one variable
                content = await response.text()
                #Initialize soup
                soup = BeautifulSoup(content, "html.parser")
                #Request access to site
                page = requests.get(url)
                #Declaring "tree" - Used to scrap by XPATH
                tree = html.fromstring(page.content)
                stuff = tree.xpath('//*[@id="content-wrap"]/div[3]/div[3]/div[2]/div[1]/div[2]/div[1]/div[2]/div[2]/h4')
                print(stuff)

            else:
                print(f"The request was invalid\nStatus code: {response.status}")

Это моя задача l oop для Discord.Py ReWrite, в основном каждые 10 секунд он получает доступ к сайту. Как показано, работает следующий код, кроме того:

stuff = tree.xpath('//*[@id="content-wrap"]/div[3]/div[3]/div[2]/div[1]/div[2]/div[1]/div[2]/div[2]/h4')
print(stuff)

Единственное, что он печатает, это "L oop Starting!" с начала l oop. С этим кодом выше (длинным) я распечатываю это:

Bot is ready for duty!
Exchange Cog is ready!
Waiting for loop!
Loop Starting!
[]

То, что я хочу отображать, это:

Bot is ready for duty!
Exchange Cog is ready!
Waiting for loop!
Loop Starting!
243

(Это число меняется каждый день, поэтому Я не могу просто использовать его один раз.)

Если кто-нибудь знает, как я смогу решить эту проблему, пожалуйста, помогите. Заранее спасибо.

1 Ответ

0 голосов
/ 25 апреля 2020

tree имеет 7 <h4> тегов, которые соответствуют описанию в вашем комментарии. Если я вас правильно понимаю, чтобы получить все 7, вы можете использовать это:

stuff = tree.xpath('//h4[@data-toggle="tooltip"]')
for s in stuff:
    print(s.text)

Вывод:

246
2
7
16
1
1
1

Если вы заранее знаете, что ваш целевой номер (например, 246 в этом tree) всегда первое, вы можете даже сократить его до:

stuff = tree.xpath('//h4[@data-toggle="tooltip"]')[0]
print(stuff.text)

и вы получите:

246
...