【问题标题】:List via loop not being created未创建通过循环的列表
【发布时间】:2020-01-19 16:35:08
【问题描述】:

我正在尝试使用循环构建一个 url 列表,然后从每个 url 中获取一个数据点,但它似乎只针对列表的最后一项 (MMM) 而不是全部.. 。 我究竟做错了什么?谢谢!

from simplified_scrapy.request import req
from simplified_scrapy.simplified_doc import SimplifiedDoc

tickers = ['AAPL','T','MMM']

for i in tickers:
    quote_page = ['https://ycharts.com/companies/'+i+'/dividend_yield']

data = []
for pg in quote_page:
  page = req.get(pg)
  doc = SimplifiedDoc(page)
  divyield = doc.select('.box boxRatio').getElementByText('Average').next.text
  data.append((divyield)[:-1])
print (data)

【问题讨论】:

  • 你只是有一个缩进问题。从data = [] 开始的方块向右移动一级,然后就可以了。
  • 尝试quote_page = ['https://ycharts.com/companies/'+i+'/dividend_yield' for i in tickers] 您当前的版本不断重新分配quote_page,只保留最后一个i。
  • 那是因为你反复用当前迭代的结果覆盖上一次迭代的结果。分配给名称 quote_page 不会在列表中累积 URL。
  • 你做过研究吗?除了通常是微不足道的之外,这个确切的问题在 Stack Overflow 上已经出现了无数次。
  • 嗨@AMC,我做了研究,但我无法为我正在做的事情找到解决方案。对不起。

标签: python scrapy


【解决方案1】:

当你执行时

for i in tickers:
    quote_page = ['https://ycharts.com/companies/'+i+'/dividend_yield']

您创建一个循环,并在循环的每次迭代中为 quote_page 分配新值(1 个元素的数组),而不是将新值附加到数组 quote_page

你可以这样做:

quote_page = []
for i in tickers:
    quote_page.append('https://ycharts.com/companies/'+i+'/dividend_yield')

或者您可以按照@DarrylG 在 cmets 中的建议使用较短的变体:

quote_page = ['https://ycharts.com/companies/'+i+'/dividend_yield' for i in tickers]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-08-10
    • 1970-01-01
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-20
    相关资源
    最近更新 更多