Как вычистить только первый предмет подряд с помощью Beautiful Soup - PullRequest
0 голосов
/ 26 июня 2018

В настоящее время я запускаю следующий скрипт Python:

import requests
from bs4 import BeautifulSoup

origin= ["USD","GBP","EUR"]
i=0
while i < len(origin):
page = requests.get("https://www.x-rates.com/table/?from="+origin[i]+"&amount=1")
soup = BeautifulSoup(page.content, "html.parser")

tables = soup.findChildren('table')
my_table = tables[0]

rows = my_table.findChildren(['td'])

i = i +1


for rows in rows:
    cells = rows.findChildren('a')
    for cell in cells:
        value = cell.string
        print(value)

Чтобы очистить данные из этого HTML:

https://i.stack.imgur.com/DkX83.png

Проблема, с которой я столкнулся, заключается в том, что я пытаюсь очистить только первый столбец, а также второй, поскольку они оба находятся под тегами и в одной строке таблицы друг с другом. Href - это единственная вещь, которая различает два тега, и я пробовал фильтровать с помощью этого, но, похоже, он не работает и возвращает пустое значение. Кроме того, когда я пытаюсь отсортировать данные вручную, выходные данные изменяются по вертикали, а не по горизонтали, я новичок в кодировании, поэтому любая помощь будет оценена :)

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Есть и другой способ, с помощью которого вы можете попытаться достичь того же:

import requests
from bs4 import BeautifulSoup

keywords = ["USD","GBP","EUR"]

for keyword in keywords:
    page = requests.get("https://www.x-rates.com/table/?from={}&amount=1".format(keyword))
    soup = BeautifulSoup(page.content, "html.parser")
    for items in soup.select_one(".ratesTable tbody").find_all("tr"):
        data = [item.text for item in items.find_all("td")[1:2]]
        print(data)
0 голосов
/ 26 июня 2018

Проще следить за тем, что происходит, когда вы печатаете каждый предмет, полученный сверху, например. в данном случае из таблицы. Идея состоит в том, чтобы идти один за другим, чтобы вы могли следовать.

import requests
from bs4 import BeautifulSoup

origin= ["USD","GBP","EUR"]
i=0
while i < len(origin):
    page = requests.get("https://www.x-rates.com/table/?from="+origin[i]+"&amount=1")
    soup = BeautifulSoup(page.content, "html.parser")
    tables = soup.findChildren('table')
    my_table = tables[0]

    i = i +1

    rows = my_table.findChildren('tr')
    for row in rows:
        cells = row.findAll('td',class_='rtRates')
        if len(cells) > 0:
            first_item = cells[0].find('a')
            value = first_item.string
            print(value)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...