1 回答
TA贡献1804条经验 获得超7个赞
为抓取添加一个配置,其中每个配置都是这样的:
prices = {
"LIVEAUOZ": {
"url": "https://www.gold.co.uk/",
"trader": "Gold.co.uk",
"metal": "Gold",
"type": "LiveAUOz",
"price": {
"selector": '#id > div > table > tr',
"parser": lambda x: float(re.sub(r"[^0-9\.]", "", x))
}
}
}
使用 price 的选择器部分获取 HTML 的相关部分,然后使用解析器函数对其进行解析。
例如
for key, config in prices.items():
response = requests.get(config['url'])
soup = BeautifulSoup(response.text, 'html.parser')
price_element = soup.find(config['price']['selector'])
if price_element:
AG_GRAM_SPOT = price_element.get_text()
# convert to float
AG_GRAM_SPOT = config['price']['parser'](AG_GRAM_SPOT)
# etc
您可以根据需要修改配置对象,但对于大多数站点来说它可能非常相似。例如,文本解析很可能总是相同的,所以不用 lambda 函数,而是用 def 创建一个函数。
def textParser(text):
return float(re.sub(r"[^0-9\.]", "", text))
然后在配置中添加对 textParser 的引用。
prices = {
"LIVEAUOZ": {
"url": "https://www.gold.co.uk/",
"trader": "Gold.co.uk",
"metal": "Gold",
"type": "LiveAUOz",
"price": {
"selector": '#id > div > table > tr',
"parser": textParser
}
}
}
这些步骤将允许您编写通用代码,保存所有那些尝试异常。
添加回答
举报