python - 如何使用 BeautifulSoup 从网站上抓取特定单元格的文本
问题描述
在过去的一个小时里,我一直在尝试从网站上抓取文本,但没有取得任何进展,仅仅是因为我对如何实际使用 BSoup 知之甚少。
def select_ticker():
url = "https://www.barchart.com/stocks/performance/gap/gap-up?screener=nasdaq"
r = requests.get(url)
html = r.text
soup = BeautifulSoup(html)
find = soup.findAll('td, {"data-ng-if:"row.blankRow"}')
print(find)
我要去这个网站并尝试从表中获取第一个符号。现在那个符号是 BFBG
我知道这对于真正知道他们在用 BSoup 做什么但我不明白搜索内容的人来说应该非常容易,而且这个网站也不容易搜索。
感谢您的宝贵时间并感谢您的帮助!
解决方案
实际上,您不能从 html 获取请求中删除第一个符号。您需要获取 json。
import urllib3
import json
http = urllib3.PoolManager()
r = http.request('GET', 'https://core-api.barchart.com/v1/quotes/get?lists=stocks.gaps.up.nasdaq&orderDir=desc&fields=symbol,symbolName,lastPrice,priceChange,gapUp,highPrice,lowPrice,volume,tradeTime,symbolCode,symbolType,hasOptions&orderBy=gapUp&meta=field.shortName,field.type,field.description&hasOptions=true&page=1&limit=100&raw=1')
print(json.loads(r.data)['data'][0]['symbol'])
你得到了第一个符号。
使用 Json,您还可以找到您可能想要废弃的所有信息。
进入控制台、网络选项卡、xhr 选项卡并重新加载页面。如果提取的资源很多,还可以按域名过滤!:)
但是,这种语法是错误的:soup.findAll('td, {"data-ng-if:"row.blankRow"}')
您需要根据 BS4 doc https://www.crummy.com/software/BeautifulSoup/bs4/doc/#find-all为 find_all 方法提供一个字典
soup.find_all('td', {'data-ng-if':'row.blankRow'})
希望这可以帮助
推荐阅读
- openmp - 找不到 OpenMP 环境变量
- python - 有没有更快的方法来使用 PIL 在图像中查找像素(按颜色)
- javascript - Javascript多维数组长度问题
- python - 'AssertionError:Torch 未在启用 CUDA 的情况下编译'
- python - 什么决定了 Pandas 的最小和最大时间戳?
- amazon-web-services - 如何 JSON 将其解析为 JSON 对象?
- html - AngularJS自动将文本变量中的链接转换为可点击的链接
- python - 如何从字符串中取出每个单词?
- driver - 如何通过我的模块与 USB 设备“交谈”?
- python - 为什么我的代码不起作用(错误:str 对象不可调用)