<p>我还将提供另一个解决方案,因为您可以直接从请求中提取数据。它还为您提供了一个选项,可以选择每页要拉多少次(并且您可以迭代每个页面),但是,如果您将该限制设置得足够高,您可以在一个请求中获得所有内容。所以大约有400多行,我将限制设置为1000行,然后您只需要第0页:</p>
<pre><code>import requests
from bs4 import BeautifulSoup
import pandas as pd
url = 'https://seffaflik.epias.com.tr/transparency/piyasalar/gop/arz-talep.xhtml'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36'}
page = '0'
payload = {
'javax.faces.partial.ajax': 'true',
'javax.faces.source': 'j_idt206:dt',
'javax.faces.partial.execute': 'j_idt206:dt',
'javax.faces.partial.render': 'j_idt206:dt',
'j_idt206:dt': 'j_idt206:dt',
'j_idt206:dt_pagination': 'true',
'j_idt206:dt_first': page,
'j_idt206:dt_rows': '1000',
'j_idt206:dt_skipChildren': 'true',
'j_idt206:dt_encodeFeature': 'true',
'j_idt206': 'j_idt206',
'j_idt206:date1_input': '04.02.2021',
'j_idt206:txt1': '0',
'j_idt206:dt_rppDD': '1000'
}
rows = []
hours = list(range(0,24))
for hour in hours:
payload.update({'j_idt206:txt1':str(hour)})
response = requests.get(url, headers=headers, params=payload)
soup = BeautifulSoup(response.text.replace('![CDATA[',''), 'lxml')
columns = ['Fiyat (TL/MWh)', 'Talep (MWh)', 'Arz (MWh)', 'hour']
trs = soup.find_all('tr')
for row in trs:
data = row.find_all('td')
data = [x.text for x in data] + [str(hour)]
rows.append(data)
df = pd.DataFrame(rows, columns=columns)
</code></pre>
<p><strong>输出:</strong></p>
<pre><code>print(df)
Fiyat (TL/MWh) Talep (MWh) Arz (MWh)
0 0,00 25.113,70 17.708,10
1 0,01 25.077,69 17.712,10
2 0,02 25.077,67 17.723,10
3 0,85 25.076,57 17.723,12
4 0,86 25.076,05 17.746,12
.. ... ... ...
448 571,01 19.317,10 29.529,60
449 571,80 19.316,86 29.529,60
450 571,90 19.316,83 29.529,70
451 571,99 19.316,80 29.529,70
452 572,00 19.316,80 29.540,70
[453 rows x 3 columns]
</code></pre>
<p>要找到这只需要一点调查工作。如果转到开发工具->;网络->;XHR,您尝试查看数据是否嵌入到这些请求中(参见图)。如果您在那里找到它,请转到<code>Headers</code>选项卡,您可以在底部获得url和参数</p>
<p>在大多数情况下,您会看到数据是以漂亮的json格式返回的。这里的情况并非如此。它是以与xml稍有不同的方式返回的,因此需要做一些额外的工作来提取标记等等。但并非不可能</p>
<p><a href="https://i.stack.imgur.com/2t3Am.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/2t3Am.png" alt="enter image description here"/></a></p>