Python 使用请求从网页收集某些值时出现问题

Python 使用请求从网页收集某些值时出现问题,python,web-scraping,beautifulsoup,python-requests,Python,Web Scraping,Beautifulsoup,Python Requests,我正在尝试从网页的表中获取一些动态值。表示我希望从该页面获取的值。应该有任何方法可以使用请求获取它们。为了让您知道,我在dev工具中查找了任何隐藏的api,还查看了pagesource中的脚本标记以找出值,但我找不到 这是 这是我要找的人 这是我迄今为止写的: import requests from bs4 import BeautifulSoup url = "https://www.dailyfx.com/sentiment" headers = {'User-Ag

我正在尝试从网页的表中获取一些动态值。表示我希望从该页面获取的值。应该有任何方法可以使用请求获取它们。为了让您知道,我在dev工具中查找了任何隐藏的api,还查看了pagesource中的脚本标记以找出值,但我找不到

这是

这是我要找的人

这是我迄今为止写的:

import requests
from bs4 import BeautifulSoup

url = "https://www.dailyfx.com/sentiment"

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; ) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'}

r = requests.get(url,headers=headers)
soup = BeautifulSoup(r.text,"lxml")
for items in soup.select(".dfx-technicalSentimentCard__barContainer"):
    data = [item.get("data-value") for item in items.select("[data-type='long-value-info'],[data-type='short-value-info']")]
    print(data)
上面的脚本生成空输出,如下所示:

['--', '--']
['--', '--']
['--', '--']
['--', '--']
['--', '--']
['--', '--']
['--', '--']
如何使用请求从该表中获取值


你的代码没有问题。问题是数字是动态的。如果您检查页面来源,您将无法找到这些数字,但只能找到

item_list=soup.find_allattrs={class:dfx-technicalSentimentCard__barContainer}打印item_list[-1]

净长 净空
你的代码没有问题。问题是数字是动态的。如果您检查页面来源,您将无法找到这些数字,但只能找到

item_list=soup.find_allattrs={class:dfx-technicalSentimentCard__barContainer}打印item_list[-1]

净长 净空
由于内容是动态加载的,因此您必须使用selenium来收集所需的信息

import time

from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys

chrome_options = Options()
chrome_options.add_argument("--window-size=1920x1080")
chrome_options.add_argument("--headless")

path_to_chromedriver = 'chromedriver'
driver = webdriver.Chrome(chrome_options=chrome_options, executable_path=path_to_chromedriver)

driver.get('https://www.dailyfx.com/sentiment')

driver.find_element_by_tag_name('body').send_keys(Keys.PAGE_DOWN)
time.sleep(5)
driver.find_element_by_tag_name('body').send_keys(Keys.PAGE_DOWN)

soup = BeautifulSoup(driver.page_source, "lxml")
for items in soup.select(".dfx-technicalSentimentCard__barContainer"):
    data = [item.get("data-value") for item in items.select("[data-type='long-value-info'],[data-type='short-value-info']")]
    print(data)

driver.quit()
对于此代码,我们可以看到以下输出:

['43', '57']
['53', '47']
['38', '62']
['56', '44']
['57', '43']
['39', '61']
['48', '52']
['77', '23']
['41', '59']
['55', '45']
['56', '44']
['74', '26']
['65', '35']
['87', '13']
['55', '45']
['32', '68']
['43', '57']
['45', '55']
['64', '36']
['56', '44']
['84', '16']
['86', '14']
['97', '3']
['90', '10']

由于内容是动态加载的,因此您必须使用selenium来收集所需的信息

import time

from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys

chrome_options = Options()
chrome_options.add_argument("--window-size=1920x1080")
chrome_options.add_argument("--headless")

path_to_chromedriver = 'chromedriver'
driver = webdriver.Chrome(chrome_options=chrome_options, executable_path=path_to_chromedriver)

driver.get('https://www.dailyfx.com/sentiment')

driver.find_element_by_tag_name('body').send_keys(Keys.PAGE_DOWN)
time.sleep(5)
driver.find_element_by_tag_name('body').send_keys(Keys.PAGE_DOWN)

soup = BeautifulSoup(driver.page_source, "lxml")
for items in soup.select(".dfx-technicalSentimentCard__barContainer"):
    data = [item.get("data-value") for item in items.select("[data-type='long-value-info'],[data-type='short-value-info']")]
    print(data)

driver.quit()
对于此代码,我们可以看到以下输出:

['43', '57']
['53', '47']
['38', '62']
['56', '44']
['57', '43']
['39', '61']
['48', '52']
['77', '23']
['41', '59']
['55', '45']
['56', '44']
['74', '26']
['65', '35']
['87', '13']
['55', '45']
['32', '68']
['43', '57']
['45', '55']
['64', '36']
['56', '44']
['84', '16']
['86', '14']
['97', '3']
['90', '10']

这回答了你的问题吗?我已经在上面的帖子中提到了@AMC,你在回答中写了什么。一个无用的链接。我不明白,你是什么意思?我在你的帖子中看不到任何与我所链接的问题相关的东西。这一行是什么意思?分析网络流量以获取所需数据并直接提出请求?这就是我的问题所在。谢谢。它将使用Ajax加载页面。如果您不想使用selenium,您需要找到Ajax API并获取所需的数据。这是否回答了您的问题?我已经在上面的帖子中提到了@AMC,你在回答中写了什么。一个无用的链接。我不明白,你是什么意思?我在你的帖子中看不到任何与我所链接的问题相关的东西。这一行是什么意思?分析网络流量以获取所需数据并直接提出请求?这就是我的问题所在。谢谢。它将使用Ajax加载页面。如果你不想使用selenium,你需要找到Ajax API并获得所需的数据。你应该得到这份赏金你应该得到这份赏金