繁体   English   中英

用python抓取数据时收不到数据怎么办?

[英]How to act when not receiving the data when scraping with python?

该站点有库存数据,我正在尝试从该站点中提取一些数据。 https://quickfs.net/company/AAPL:US

其中 AAPL 是股票名称,可以更改。

该页面看起来像一个大表:列是年份,行是计算值,例如:资产回报率和毛利率

为此,我尝试遵循一些教程:

Web爬虫介绍(Python)-第02课(爬虫表)

Web 刮痧Python 和美汤介绍

Web 用 Python 抓取 HTML 表

Web 用 Python 刮擦 — A 到 Z A 部分 — 处理 BeautifulSoup 并避免阻塞

导入软件包后,我一开始就卡住了:

from bs4 import BeautifulSoup as soup
from urllib.request import urlopen as uReq

此 function 从 web 页面检索数据:

def make_soup(url):
    thepage=uReq(url)
    soupdata=soup(thepage, "html.parser")
    return(soupdata)

然后

soup=make_soup("https://quickfs.net/company/AAPL:US")

现在,当试图查看汤里面的数据时

soup.text

output 只是这个而不是网页上的所有数据:

'\n\n\n\n\n\n\n\n\n\n\n\nExport Fundamental Data U.S. and International Stocks - QuickFS.net\n\n\n\n\n\n  \r\n  Loading QuickFS...\r\n  \n\n\n\n\n\n\n\n\n\n\n\n\n\n'

我认为这是特定 web 页面的问题,但我不知道如何处理。

输入不同的 url function make_soup(url) 有时会起作用。

恳请您的帮助

那是因为该页面是完全动态的,这意味着 javascript 正在完成所有工作,而 BeautifulSoup4 不运行 JS。

你必须在这里选择:

  • A)切换到类似 Selenium
  • B) 检查站点发送到 api/server 的 XHR 消息,并尝试从 python 模拟该消息。

在 B 的情况下,您会看到该站点正在进行此调用:

curl 'https://api.quickfs.net/stocks/AAPL:US/ovr/Annual/' \
-XGET \
-H 'Accept: application/json, text/plain, */*' \
-H 'Content-Type: application/json' \
-H 'Origin: https://quickfs.net' \
-H 'Accept-Language: en-us' \
-H 'Host: api.quickfs.net' \
-H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1 Safari/605.1.15' \
-H 'Referer: https://quickfs.net/company/AAPL:US' \
-H 'Accept-Encoding: gzip, deflate, br' \
-H 'Connection: keep-alive' \
-H 'X-Auth-Token: ' \
-H 'X-Referral-Code: '

你可以做的是:

import requests

response = request.get("https://api.quickfs.net/stocks/AAPL:US/ovr/Annual/")
data = response.json()

其中 data 将是网站用来呈现信息的原始数据:

{
    "datasets": {
        "metadata": {
            "_id": {},
            "qfs_symbol": "NAS:AAPL",
            "currency": "USD",
            "fsCat": "normal",
            "name": "Apple Inc.",
            "gs3_version_at_metadata_update": 20191106,
            "exchange": "NASDAQ",
            "industry": "Technology Hardware & Equipment",
            "symbol": "AAPL",
            "country": "US",
            "price": 278.58,
        ...
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM