Я пытаюсь выполнить упражнение в книге практического анализа данных, цель которой - очистить цену золота от веб-сайта. Исходный код не работает, и я проследил его до того, что, по моему мнению, является переработкой веб-сайта со времени original script.BeautifulSoup предоставляет различные результаты для .find и .find_all
Чтобы попробовать еще получить упражнение на работу я работал на реконструкцию скрипта немного:
from bs4 import BeautifulSoup
import requests
import re
from time import sleep
from datetime import datetime
def getGoldPrice():
url = "http://www.gold.org"
req = requests.get(url)
soup = BeautifulSoup(req.text, "lxml")
price = soup.find_all("dd", class_="value")[1]
return price
with open("goldPrice.out","w") as f:
for x in range(0,3):
sNow = datetime.now().strftime("%I:%M:%S%p")
f.write("{0}, {1} \n ".format(sNow, getGoldPrice()))
sleep(59)
Это работало на начальную часть, пока я не понял, что это не вытягивать активные метки обновляя каждую минуту (первоначальная цель). После этого немного more research я узнал, что я мог бы копаться в том, что немного больше с
soup.find('script', type="text/javascript").text
вместо использования .find_all() и запустить регулярное выражение на сценарий.
Это работало очень хорошо, за исключением исходного регулярного сообщения, поэтому я работал над выяснением того, что использовать, чтобы получить цену для группы «спросить». Когда я вернулся, чтобы вызвать это обновленное регулярное выражение в файле, мое выражение больше не предоставило тот же базовый результат.
В настоящее время, если я делаю
soup.find_all('script', type="text/javascript")
я получаю различный набор результатов, чем с
soup.find('script', type="text/javascript").text
, к сожалению, я не могу принять результат soup.find_all в .text как я могу для команды soup.find. Есть ли часть этой команды, которую я пропускаю, что получаю такие разные результаты?
Спасибо за помощь!
EDIT: С помощью ответа я закончил использование следующих бит строки, чтобы заменить компонент price
, чтобы получить то, что я искал!
js_text = soup.find_all('script', type="text/javascript")[10]
js_text = js_text.string
regex = re.compile('"ask":{"css":"minus","price":"(.*)","performance":-1}},"G')
price = re.findall(regex, js_text)
Понятно, что мое регулярное выражение очень специфично для моей проблемы.
Спасибо за помощь! Цикл 'for' не получил результат, который я искал, но с объяснением того, что это список тегов и один тег, я смог получить правильный индекс для определенной части, которую я искал, и смог получить regex сузить то, что мне нужно! –