Webcrawler: извлечение строки из массива с помощью Python3 на Mac - PullRequest
1 голос
/ 05 апреля 2020

У меня проблема с написанием веб-сканера для извлечения курсов валют:

import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin
import re


url = "https://wechselkurse-euro.de/"

r = requests.get(url)
rates = []
status = r.status_code

if status != 200:
    print("Something went wrong while parsing the website " + url)

temp = BeautifulSoup(r.text, "html.parser")
current_date = temp.select(".ecb")[0].text.strip().split(" ")[5]

#rates_array = temp.select(".kurz_kurz2.center", limit= 20).string

rates_array = temp.select(".kurz_kurz2.center", limit= 20)

#for i in rates_array:
#    rate = rates_array[i].string
#    rates.append(rate)

rates = list( map( lambda x: re.search(">\d{1}\.\d{4}",x), rates_array))

print(rates)

#rate_1EUR_to_USD =  
#rate_1EUR_to_GBP =


Я пробовал несколько способов, которые закомментированы - все они не работают, и я не знаю почему. Особенно неработающая строка .string меня удивляет, так как похоже, что rate_array наследует всю различную информацию об объекте bs4, включая информацию о том, что есть тег td <td class="kurz_kurz2 center" title="Aktueller Wechselkurs am 3.4.2020">0.5554</td>, где я просто хочу строку внутри тега (поэтому значение 0,5554 в приведенном выше примере). Это должно быть легко, но ничего не работает, что я делаю не так?

Регулярное выражение не должно быть проблемой, я проверял его на regExR.

Я пытался использовать функцию карты в качестве активной в данный момент, но не могу преобразовать объект карты в список, как я должен.

Строка select (). Возвращает пустой список и то же самое с использованием выражений relgular для поиска по строкам, которые я сохранил в rate_array, когда я пытаюсь использовать oldschool способ итерации по каждому элементу моей функции с помощью для l oop.

String as атрибут объекта bs4

Ответы [ 2 ]

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

Ваш rates_array содержит Красивые теги объектов Soup , а не строки. Поэтому вам нужно получить доступ к их свойству text, чтобы получить значения. Например:

rates = [o.text for o in rates_array]

Теперь rates содержит:

['0.5554', '0.1758']
0 голосов
/ 05 апреля 2020

Я бы порекомендовал вам сначала проверить локатор. Вы уверены, что rate_array не пустой? Также попробуйте: rate_array [i] .text

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...