我需要知道curr_id
使用python提交到invest.com并提取多种货币/商品的历史数据。为此,我需要curr_id
号码。如下例所示。我能够提取所有脚本。但后来我无法弄清楚如何找到包含curr_id
的正确脚本索引并提取数字' 2103'。示例:我需要代码才能找到2103。
import requests
from bs4 import BeautifulSoup
url = 'http://www.investing.com/currencies/usd-brl-historical-data'
r = requests.get(url)
#URL
url='http://www.investing.com/currencies/usd-brl-historical-data'
#OPEN URL
r = requests.get(url)
#DETERMINE FORMAT
soup=BeautifulSoup(r.content,'html.parser')
#FIND TABLE WITH VALUES IN soup
curr_data = soup.find_all('script', {'type':'text/javascript'})'
UPDATE 我是这样做的: g_data_string = STR(速度G_data)
if 'curr_id' in g_data_string:
print('success')
start = g_data_string.find('curr_id') + 9
end = g_data_string.find('curr_id')+13
print(g_data_string[start:end])
但我确信有更好的方法可以做到。
答案 0 :(得分:2)
您可以使用regular expression pattern作为text
参数来查找特定的script
元素。然后,使用相同的正则表达式在script
的文本内搜索:
import re
import requests
from bs4 import BeautifulSoup
url = 'http://www.investing.com/currencies/usd-brl-historical-data'
r = requests.get(url)
soup = BeautifulSoup(r.content, 'html.parser')
pattern = re.compile(r"curr_id: (\d+)")
script = soup.find('script', text=pattern)
match = pattern.search(script.text)
if match:
print(match.group(1))
打印2103
。
此处(\d+)
是一个匹配一个或多个数字的捕获组。
答案 1 :(得分:1)
您实际上并不需要正则表达式,您可以通过使用name=item_ID
In [6]: from bs4 import BeautifulSoup
In [7]: import requests
In [8]: r = requests.get("http://www.investing.com/currencies/usd-brl-historical-data").content
In [9]: soup = BeautifulSoup(r, "html.parser")
In [10]: soup.select_one("input[name=item_ID]")["value"]
Out[10]: u'2103'
您还可以查找以item_id
开头的ID:
In [11]: soup.select_one("input[id^=item_id]")["value"]
Out[11]: u'2103'
或者查找带有pair_id
属性的第一个div:
In [12]: soup.select_one("div[pair_id]")["pair_id"]
Out[12]: u'2103'
实际上有很多方法可以实现它。