使用多个输入在python中抓取网页
我需要使用python从这个网站的表中获取数据。 到目前为止,我编写的代码是使用多个输入在python中抓取网页,python,python-3.x,beautifulsoup,python-requests,webpage,Python,Python 3.x,Beautifulsoup,Python Requests,Webpage,我需要使用python从这个网站的表中获取数据。 到目前为止,我编写的代码是 from bs4 import BeautifulSoup import requests url = 'https://www.cashbackforex.com/en-US/tools/economic-impacts.aspx' with requests.Session() as session: session.headers = {'User-Agent': 'Mozilla/5.0 (Maci
from bs4 import BeautifulSoup
import requests
url = 'https://www.cashbackforex.com/en-US/tools/economic-impacts.aspx'
with requests.Session() as session:
session.headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36'}
# parsing parameters
response = session.get(url)
soup = BeautifulSoup(response.content, "lxml")
print(soup.select('input[type="button"]'))
data = {
'dnn$ctr1601$Chart$ddlCurrencies': 'USD',
'dnn$ctr1601$Chart$ddlReports': 'US Change in NonFarm Payrolls',
'dnn$ctr1601$Chart$ddlTimeZone': '(UTC) Coordinated Universal Time',
'__EVENTTARGET': soup.find('input', {'name': '__EVENTTARGET'}).get('value', ''),
'__EVENTARGUMENT': soup.find('input', {'name': '__EVENTARGUMENT'}).get('value', ''),
'__VIEWSTATE': soup.find('input', {'name': '__VIEWSTATE'}).get('value', ''),
'__VIEWSTATEGENERATOR': soup.find('input', {'name': '__VIEWSTATEGENERATOR'}).get('value', ''),
'btnApplyTools': soup.find('input', {'id': 'btnApplyTools'}).get('value', '')
}
# parsing data
response = session.post(url, data=data)
soup = BeautifulSoup(response.content, "lxml")
print(soup)
但每次运行该程序时,我都无法在表中找到值。我认为程序不会将输入值发送到服务器,但我不确定
下表:
我检查了提供的页面,发现不需要在
会话()中使用,并发送多个参数以获取所需的表。您只需指定inst
参数(类似于过滤器的标识符)和时区
。例如,对于美元
/美国非农就业人数的变化
指令
参数值为10332295
,(UTC)协调世界时的时区
为3
所以你的请求应该是
params = {'inst': '10332295', 'timezone': '3'}
response = requests.get('https://www.cashbackforex.com/DesktopModules/Chart/HistoricalEventFigures.ashx', params=params)
然后您可以方便地解析响应
,例如:
from xml.dom import minidom
xml = minidom.parseString(response.text)
print([i.childNodes[0].wholeText for i in xml.getElementsByTagName("Date")])
print([i.childNodes[0].wholeText for i in xml.getElementsByTagName("ReportName")])
...
输出:
['2 Dec 2016', '4 Nov 2016', '7 Oct 2016', '2 Sep 2016', '5 Aug 2016', '8 Jul 2016', '3 Jun 2016',...]
['US Change in NonFarm Payrolls', 'US Change in NonFarm Payrolls', 'US Change in NonFarm Payrolls', 'US Change in NonFarm Payrolls',...]
你想模仿什么样的要求?当我点击红色的“应用”按钮时,我在浏览器开发者工具中看不到关于economic impacts.aspx
的帖子。当我更改一个变量时,即美元,美国非农工资单的变化并点击应用底部。下面名为“事件历史记录”的表格发生了变化。我需要提取那个表。但当我和BeautifulSoup一起读那张表时,没有一行出现。谢谢你的回答。你的代码部分工作,但我需要该程序通过所有的下拉列表。这样我就可以得到所有的。例如,它需要从AUD开始查找从AU银行假日-ANZAC日开始到结束的所有事件。您是如何找到“”的?当您单击Apply
按钮时,您将发送3个GET
请求:https://www.cashbackforex.com/DesktopModules/Chart/Candles.ashx
对于图表上显示的数据,https://www.cashbackforex.com/DesktopModules/Chart/SameTimeReports.ashx
用于第一个表和https://www.cashbackforex.com/DesktopModules/Chart/HistoricalEventFigures.ashx
秒(事件历史记录
)表。每对事件查找器
如AUD
-AU银行假日-ANZAC
都有自己的inst
参数,但我不知道您应该为AUD
对应用的inst
值的确切范围,因为它们似乎不是连续的。。。