Webcrawler:使用 mac 上的 Python3 从数组中提取字符串

Webcrawler: extracting string out of array using Python3 on mac

我在编写网络爬虫来提取货币汇率时遇到问题:

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 不起作用让我感到惊讶,因为 rates_array 似乎继承了 bs4 对象的所有不同信息,包括有一个 td 标记 <td class="kurz_kurz2 center" title="Aktueller Wechselkurs am 3.4.2020">0.5554</td> 的信息,我只想要其中的字符串标签(因此上例中的值为 0.5554)。这应该很容易,但没有任何效果,我做错了什么?

应该不是正则表达式的问题,我在regExR上测试过。

我尝试使用当前处于活动状态的地图功能,但我无法按预期将地图对象转换为列表。

select().string returns 一个空列表,与使用正则表达式搜索我在 rates_array 中保存的字符串相同,当我尝试做老派时使用 for 循环遍历函数的每个项目的方法。

String as attribute of bs4-object

我建议您先检查定位器。 您确定 rates_array 不是空的吗? 另外,尝试: rates_array[i].text

您的 rates_array 包含 Beautiful Soup tag objects,而不是字符串。因此,您必须访问他们的 text 属性 才能获取值。例如:

rates = [o.text for o in rates_array]

现在 rates 包含:

['0.5554', '0.1758']