我想從這個網站抓取價格歷史:https : //www.sharesansar.com/company/shl 點擊價格歷史按鈕后,表格被加載,但網址保持不變。我想刮桌子加載。
import requests
from bs4 import BeautifulSoup
url = "https://www.sharesansar.com/company/shl"
rr = requests.get(url)
htmll = rr.text
soup = BeautifulSoup(htmll)
uj5u.com熱心網友回復:
在 Chrome/Firefox 中使用DevTools(tab: Network) 您可以看到此頁面用于JavaScript從另一個 URL 加載資料。
https://www.sharesansar.com/company-price-history?draw=1&columns[0][data]=DT_Row_Index&columns[0][name]=&columns[0][searchable]=false&columns[0][orderable]=false&columns[0][search][value]=&columns[0][search][regex]=false&columns[1][data]=published_date&columns[1][name]=&columns[1][searchable]=true&columns[1][orderable]=false&columns[1][search][value]=&columns[1][search][regex]=false&columns[2][data]=open&columns[2][name]=&columns[2][searchable]=false&columns[2][orderable]=false&columns[2][search][value]=&columns[2][search][regex]=false&columns[3][data]=high&columns[3][name]=&columns[3][searchable]=false&columns[3][orderable]=false&columns[3][search][value]=&columns[3][search][regex]=false&columns[4][data]=low&columns[4][name]=&columns[4][searchable]=false&columns[4][orderable]=false&columns[4][search][value]=&columns[4][search][regex]=false&columns[5][data]=close&columns[5][name]=&columns[5][searchable]=false&columns[5][orderable]=false&columns[5][search][value]=&columns[5][search][regex]=false&columns[6][data]=per_change&columns[6][name]=&columns[6][searchable]=false&columns[6][orderable]=false&columns[6][search][value]=&columns[6][search][regex]=false&columns[7][data]=traded_quantity&columns[7][name]=&columns[7][searchable]=false&columns[7][orderable]=false&columns[7][search][value]=&columns[7][search][regex]=false&columns[8][data]=traded_amount&columns[8][name]=&columns[8][searchable]=false&columns[8][orderable]=false&columns[8][search][value]=&columns[8][search][regex]=false&start=0&length=20&search[value]=&search[regex]=false&company=95&_=1639245456705'
使用requests此 url,您可以獲得表作為 JSON 資料,而您不需要BeautifulSoup
在代碼中,我將此 url 中的所有值轉換為payload- 因此您可以輕松替換值以獲取不同的資料。
可能如果您更改'start'( 20, 40, 等),那么您可以獲得表格中的下一頁。
如果您使用,'length": 50那么您會在一個請求中獲得更多值 - 但更大的值不起作用。
順便說一句:這個 url 需要請求X-Requested-With使用的標頭AJAX。
import requests
payload = {
'_': '1639245456705',
'columns[0][data]': 'DT_Row_Index',
'columns[0][orderable]': 'false',
'columns[0][search][regex]': 'false',
'columns[0][searchable]': 'false',
'columns[1][data]': 'published_date',
'columns[1][orderable]': 'false',
'columns[1][search][regex]': 'false',
'columns[1][searchable]': 'true',
'columns[2][data]': 'open',
'columns[2][orderable]': 'false',
'columns[2][search][regex]': 'false',
'columns[2][searchable]': 'false',
'columns[3][data]': 'high',
'columns[3][orderable]': 'false',
'columns[3][search][regex]': 'false',
'columns[3][searchable]': 'false',
'columns[4][data]': 'low',
'columns[4][orderable]': 'false',
'columns[4][search][regex]': 'false',
'columns[4][searchable]': 'false',
'columns[5][data]': 'close',
'columns[5][orderable]': 'false',
'columns[5][search][regex]': 'false',
'columns[5][searchable]': 'false',
'columns[6][data]': 'per_change',
'columns[6][orderable]': 'false',
'columns[6][search][regex]': 'false',
'columns[6][searchable]': 'false',
'columns[7][data]': 'traded_quantity',
'columns[7][orderable]': 'false',
'columns[7][search][regex]': 'false',
'columns[7][searchable]': 'false',
'columns[8][data]': 'traded_amount',
'columns[8][orderable]': 'false',
'columns[8][search][regex]': 'false',
'columns[8][searchable]': 'false',
'company': '95',
'draw': '1',
'length': '20',
'search[regex]': 'false',
'start': '0'
}
headers = {
'X-Requested-With': 'XMLHttpRequest'
}
url = 'https://www.sharesansar.com/company-price-history'
response = requests.get(url, params=payload, headers=headers)
data = response.json()
#print(data)
print('NR | DATA | OPEN | CLOSE |')
for number, item in enumerate(data['data'], 1):
print(f'{number:3} |', item['published_date'], "|", item['open'], "|", item['close'], "|")
結果:
NR | DATA | OPEN | CLOSE |
1 | 2021-12-09 | 208.70 | 206.00 |
2 | 2021-12-08 | 214.90 | 205.00 |
3 | 2021-12-07 | 218.00 | 211.00 |
4 | 2021-12-06 | 208.00 | 214.00 |
5 | 2021-12-05 | 215.00 | 211.00 |
6 | 2021-12-02 | 225.00 | 217.10 |
7 | 2021-12-01 | 226.00 | 224.50 |
8 | 2021-11-30 | 224.60 | 225.00 |
9 | 2021-11-29 | 227.00 | 225.00 |
10 | 2021-11-28 | 233.00 | 227.00 |
11 | 2021-11-25 | 233.00 | 237.00 |
12 | 2021-11-24 | 228.00 | 230.00 |
13 | 2021-11-23 | 233.50 | 230.10 |
14 | 2021-11-22 | 238.00 | 237.00 |
15 | 2021-11-21 | 242.70 | 234.40 |
16 | 2021-11-18 | 236.00 | 240.00 |
17 | 2021-11-17 | 243.00 | 240.00 |
18 | 2021-11-16 | 232.00 | 239.90 |
19 | 2021-11-15 | 226.00 | 231.50 |
20 | 2021-11-14 | 228.00 | 225.60 |
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/382741.html
