从 Investing 中查找并提取 curr_id 个数字
Find and extract curr_id number from Investing
我需要知道 curr_id
使用 python 提交到 investing.com 并提取一些 currencies/commodities 的历史数据。为此,我需要 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'})'
更新
我是这样做的:
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])
但我确信有更好的方法。
您可以使用 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+)
是一个 捕获组 ,它将匹配一个或多个数字。
您实际上不需要正则表达式,您可以通过使用 name=item_ID
从输入标签中提取值属性来获取 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'
实际上有很多方法可以得到它。
我需要知道 curr_id
使用 python 提交到 investing.com 并提取一些 currencies/commodities 的历史数据。为此,我需要 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'})'
更新 我是这样做的: 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])
但我确信有更好的方法。
您可以使用 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+)
是一个 捕获组 ,它将匹配一个或多个数字。
您实际上不需要正则表达式,您可以通过使用 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
:
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'
实际上有很多方法可以得到它。