簡體   English   中英

Python,刮板BS4

[英]Python, Scraping BS4

關於這個主題有很多帖子,但我仍然無法實現我想要的,所以這是我的問題:

我正在嘗試從該站點提取股票價格: https://bors.e24.no/#./instrument/NHY.OSE

我想從“檢查”文本中提取價格:57,12:

<div class="number LAST" data-reactid=".g.1.2.0">
57,12</div>

這是我嘗試生成“AttributeError”和“NoneType”的代碼 object 沒有屬性“文本”。

我還嘗試在 PRICE 行中刪除.text,結果是“價格為:無”

from bs4 import BeautifulSoup
import requests
url = 'https://bors.e24.no/#!/instrument/NHY.OSE'
page = requests.get(url)
soup = BeautifulSoup(page.text, 'lxml')
PRICE= soup.find('div', class_= "number LAST").text
print('Price is:',(PRICE))

嘗試這個:

import requests

headers = {
    'user_agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36',
}

api_url = "https://bors.e24.no/server/components?columns=ITEM, LAST, BID, ASK, CHANGE, CHANGE_PCT, TURNOVER, LONG_NAME&itemSector=NHY.OSE&type=table"
data = requests.get(api_url, headers=headers).json()
print(data["rows"][0]["values"]["LAST"])

Output:

56.92

發生這種情況是因為您的

requests.get(url)

不會獲得頁面中的所有信息,包括您要查找的價格,因為所述網頁會加載其中的某些部分,然后才會獲取更多數據。 因此,嘗試 select div 與 className="number LAST"

PRICE= soup.find('div', class_= "number LAST").text

會拋出一個錯誤,因為這還不存在。

有一些方法可以解決這個問題:

  1. 您可以嘗試使用Selenium 之類的庫,通常建議使用它來抓取更多依賴某些 Javascript 和 API 調用來加載內容的動態頁面。

  2. 您可以打開您的開發人員工具並檢查“網絡”選項卡,您可能會在其中找到獲取您嘗試廢棄的價格的請求。

我相信在您的情況下,在自己查看“網絡”選項卡后,請求的正確 URL 可能是“https://bors.e24.no/server/components?columns=TIME,+PRICE,+VOLUME,+ BUYER,+SELLER,+ID&filter=ITEM%3D%3DsNHY&limit=5&source=feed.ose.trades.EQUITIES%2BPCC&type=history',這似乎返回了一個包含您要查找的價格的字典。

import requests
url = 'https://bors.e24.no/server/components?columns=TIME,+PRICE,+VOLUME,+BUYER,+SELLER,+ID&filter=ITEM%3D%3DsNHY&limit=5&source=feed.ose.trades.EQUITIES%2BPCC&type=history'
page = requests.get(url)
print(page.json()["rows"][0]["values"]["PRICE"])

如果您希望廢棄各種鏈接,您需要找到一種方法來動態地將上一個鏈接更改為與您嘗試抓取的其他鏈接相匹配的鏈接。 我想這意味着將“NHY”和“ose”更改為與您正在尋找的其他股票相匹配的東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM