从 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'

实际上有很多方法可以得到它。