因此,我试图从下面代码的URL的“最活跃”部分中抓取公司名称和股价,并将其全部存储在列表中。我当时在考虑使用循环,这样它就可以抓住所有的循环,但是出于某种原因,它只能获得第一家公司及其股票价格。看来,无论我是否要搜索“ tbody”,它都将返回相同的单个公司和价格,而不是遍历整个页面。任何帮助将不胜感激。
import requests
from bs4 import BeautifulSoup
stock_list = []
url='https://markets.on.nytimes.com/research/markets/overview/overview.asp'
response = requests.get(url)
if not response.status_code == 200:
print(respose.status_code)
results_page = BeautifulSoup(response.content,'lxml')
key_data=results_page.find('table',class_="stock-spotlight-table",id="summ_vol+")
key_data2=key_data.find_all('tbody')
def pull_active(url):
for i in key_data2:
label = i.find('a', class_='truncateMeTo1').get_text()
value = i.find('td', class_='colPrimary').get_text()
stock_list.append((label, value))
print(stock_list)
pull_active(url)
答案 0 :(得分:1)
您要遍历所有表,而不要遍历每个表中的所有项目。
def pull_active(url):
for i in key_data2:
for td in i.findall('td', class_='colText'):
label = td.find('a', class_='truncateMeTo1')
value = td.find('td', class_='colPrimary')
if a and col:
stock_list.append((label.get_text(), value.get_text()))
print(stock_list)
答案 1 :(得分:0)
import requests
from bs4 import BeautifulSoup
stock_list = []
url='https://markets.on.nytimes.com/research/markets/overview/overview.asp'
response = requests.get(url)
if not response.status_code == 200:
print(respose.status_code)
results_page = BeautifulSoup(response.content,'lxml')
key_data=results_page.find('table',class_="stock-spotlight-table",id="summ_vol+")
key_data2=key_data.find('tbody').find_all('tr')
def pull_active(url):
for i in key_data2:
label = i.find('a', class_='truncateMeTo1').get_text()
value = i.find('td', class_='colPrimary').get_text()
stock_list.append((label, value))
print(stock_list)
pull_active(url)
key_data2 = key_data.find_all('tbody')
这是导致解决方案出现问题的行。 表格行代表每个项目。因此,您需要找到所有行并对其进行迭代
答案 2 :(得分:0)
基于@Barmar的答案,我也能够得到与此稍有不同的解决方案。
def pull_active(url):
for i in key_data2:
for td in i.find_all('td', class_='colText'):
label = td.find('a', class_='truncateMeTo1').get_text()
value = i.find('td', class_='colPrimary').get_text()
stock_list.append((label, value))
print(stock_list)