iT邦幫忙

0

API 無法在程式中使用

大家好,小弟要利用爬蟲爬取鉅亨上的一些財經新聞

因為網頁每一篇網頁的連結似乎都是使用ajax render上去的,所以後來我用工具找到他們內部使用的 api : https://ess.api.cnyes.com/ess/api/v1/news/keyword?q=台積電&limit=20&page=2

不過這個api我用瀏覽器時可以正常使用,會成功回傳資料,但我用程式時卻只會回傳 400-Bad Request,也有嘗試補上user-agent等等資訊,可是還是一樣,想請問可能是哪裡有問題?


Update:
感謝各位的回答,小弟是使用golang net/http套件來發送請求,原本程式碼大致如下

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://ess.api.cnyes.com/ess/api/v1/news/keyword?q=台積電&limit=20&page=2", nil)
	if err != nil {
		log.Println(err)
	}
    //...

後來發現 http.NewRequest 這邊的網址不能直接打中文,而是要先改成URL編碼,也就能正常的回應了,感謝各位幫忙!

偽造一下UA成Chrome人類版的試看看
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
3
㊣浩瀚星空㊣
iT邦大神 1 級 ‧ 2021-09-15 21:29:47
最佳解答

先在機器上直接打命令,試試用WGET或CURL是否能取得。
雖然看起來因該沒做什麼防護。

如果命令都可以正常取得。但程式還是拿到400。
那就一定是你的程式問題了。
至於啥問題?沒看到程式碼說不準的。

tw_hsu iT邦新手 4 級 ‧ 2021-09-15 22:29:46 檢舉

我也嘗試了用 Postman
但不管是Get還是Post
都至少有Json回傳

需要更多資訊

3
allenlwh
iT邦高手 1 級 ‧ 2021-09-15 19:12:00

有沒有宣告資料的型態是 json

type: "POST",
dataType: "json",
contentType: "application/json;charset=utf-8",
1
froce
iT邦大師 1 級 ‧ 2021-09-16 08:46:46
import requests

r = requests.get('https://ess.api.cnyes.com/ess/api/v1/news/keyword?q=台積電&limit=20&page=2')

正常啊,不用任何特別設定。

我要發表回答

立即登入回答