'NoneType' WebScraping StockTwits 时出错

'NoneType' Error While WebScraping StockTwits

我正在尝试编写一个脚本来简单地读取和打印特定帐户监视列表中的所有代码。我已经设法从 HTML 导航到打印用户名的页面,现在我想通过使用 find() 找到他们的位置来打印他关注的所有代码,然后 .find_all()找到每个代码,但每次我尝试使用 find() 命令导航到监视列表代码时,它 returns 'NoneType.'

这是我的代码:

import requests
import xlwt
from xlutils.copy import copy
from xlwt import Workbook
import xlrd
import urllib.request as urllib2
from bs4 import BeautifulSoup

hisPage = ("https://stocktwits.com/GregRieben/watchlist")

page = urllib2.urlopen(hisPage)

soup = BeautifulSoup(page, "html.parser")

his_name = soup.find("span", {"class":"st_33aunZ3 st_31YdEUQ st_8u0ePN3 st_2mehCkH"})

name = his_name.text.strip()
print(name)

watchlist = soup.find("div", {"class":"st_16989tz"})

tickers = watchlist.find_all('span', {"class":"st_1QzH2P8"})

print(type(watchlist))
print(len(watchlist))

这里我想要突出显示的值 (LSPD.CA) 和之后的所有其他值(它们都具有完全相同的 HTML 设置)

这是我的错误:

该内容是通过 api 调用动态添加的(因此不会出现在您对原始 url 的请求中,其中 DOM 不会像使用浏览器时那样更新) .您可以在网络流量中找到监视列表的 API 调用。它returnsjson。你可以从中提取你想要的东西。

import requests

r = requests.get('https://api.stocktwits.com/api/2/watchlists/user/396907.json').json()
tickers = [i['symbol'] for i in r['watchlist']['symbols']]
print(tickers)

如果您需要获取用户 ID 以传递给 API,它会出现在许多地方以响应您的原始 url。我正在使用正则表达式从脚本标签中获取

import requests, re

p = re.compile(r'subjectUser":{"id":(\d+)')

with requests.Session() as s:
    r = s.get('https://stocktwits.com/GregRieben/watchlist')
    user_id = p.findall(r.text)[0]
    r = s.get('https://api.stocktwits.com/api/2/watchlists/user/' + user_id + '.json').json()
    tickers = [i['symbol'] for i in r['watchlist']['symbols']]
print(tickers)