Python抓取:在使用bs4拉入数据之后,有没有一种方法可以使用find_all的多个属性?

2024-09-29 23:28:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用这个代码从一个数字表中提取数据。我只需要一些数据元素,所以在将不需要的数据放入列表后,我会弹出这些数据。 Example of the table

soup = BeautifulSoup(response.content, "html.parser")
vals = soup.find_all("span", attrs={"class": "W(39%) Fl(start)"})
for val in vals:
    PullList.append(val.text)
seq = [20, 19, 17, 16, 14, 13, 11, 10, 8, 7, 6, 5, 4, 2, 1]
for t in seq:
    PullList.pop(t)
print(PullList)

“span”,attrs={“class”:“W(39%)Fl(start)仅指第1、3和3列中的数据;上述示例表的第5部分

我遇到的问题是,有时数据表包含负数,html代码会将表中的数字变成红色。span定义中的属性现在从“W(39%)Fl(start)”更改为“W(39%)Fl(start)C($C-fuji-red-2-b)”。因为我使用的是一个特定的attrs值,所以红色(负数)数字不符合find_all语句的要求,因此没有被拉入列表

有没有办法在属性定义中使用多个值


Tags: 数据代码列表html数字allfindstart
1条回答
网友
1楼 · 发布于 2024-09-29 23:28:11

您当前可以使用css选择器以该列为目标并切掉标题

import requests
from bs4 import BeautifulSoup as bs

tickers = ['PSHAX','FKAIX']

def get_list(s, ticker):
    r = s.get(f'https://finance.yahoo.com/quote/{ticker}/risk?p={ticker}')
    soup = bs(r.content, 'lxml')
    three_year = [i.text for i in soup.select('div:nth-child(2) > span.W\(39\%\).Fl\(start\)')]
    if len(three_year) > 0:
        return three_year[1:]
    return 

with requests.Session() as s:
    for ticker in tickers:
        print(get_list(s, ticker))

相关问题 更多 >

    热门问题