Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用多个输入在python中抓取网页_Python_Python 3.x_Beautifulsoup_Python Requests_Webpage - Fatal编程技术网

使用多个输入在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

我需要使用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 (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
值的确切范围,因为它们似乎不是连续的。。。