如何使用BeautifulSoup从网站上抓取特定单元格的文本

时间:2018-06-27 18:32:35

标签: 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)

我要去this网站并尝试从表格中获取第一个符号。现在那个符号是BFBG

我知道这对于真正知道他们正在使用BSoup进行操作的人来说应该是非常容易的,但是我不了解搜索内容,并且该网站也使搜索变得不容易。

感谢您的宝贵时间,感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

实际上,您不能从html get请求中删除第一个符号。您需要获取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,您还可以找到您可能想剪贴的所有信息。

enter image description here

在这里通常可以找到那些Jsons: enter image description here

进入控制台,“网络”选项卡,“ xhr”选项卡并重新加载页面。如果获取了大量资源,则还可以按域名称进行过滤! :)

但是,此语法错误:     soup.findAll('td,{“ data-ng-if:” row.blankRow“}')

您需要根据BS4文档为find_all方法提供字典 https://www.crummy.com/software/BeautifulSoup/bs4/doc/#find-all

soup.find_all('td', {'data-ng-if':'row.blankRow'})

希望这会有所帮助