【问题标题】:Python scrape with multi variable具有多变量的 Python 抓取
【发布时间】:2020-01-19 10:08:38
【问题描述】:

我想从两个网站上抓取一些数据点来获取一系列股票代码。例如:

对于数组:AAPL、FB、AMZN、...

1) 提取:来自https://ycharts.com/companies/AAPL/dividend_yield 的“股息收益率范围,过去 5 年 - 平均值”值(AAPL 是变量)

2) 提取:来自https://ycharts.com/companies/AAPL/pe_ratio 的“PE 比率范围,过去 5 年 - 平均值”值(AAPL 是变量)

3) 从https://www.finviz.com/quote.ashx?t=AAPL 中提取:'Book/sh' AND 'LT Debt/Eq' 值(AAPL 是变量)

以 CSV 格式输出:

Value1、Value2、Value3... 用于列标题

AAPL,T,MMM... 用于行标题

我已经从这个开始行动 1)

import urllib2
from bs4 import BeautifulSoup
import csv
from datetime import datetime

quote_page = ['https://ycharts.com/companies/AAPL/dividend_yield', 'https://ycharts.com/companies/T/dividend_yield', 'https://ycharts.com/companies/MMM/dividend_yield']

data = []
for pg in quote_page:
 page = urllib2.urlopen(pg)

soup = BeautifulSoup(page, 'html.parser')
divyield_box = soup.find('td', attrs={'class': 'col2'})
divyield = divyield_box.text.strip()
data.append((divyield))

with open('index.csv', 'a') as csv_file:
 writer = csv.writer(csv_file)
 for divyield in data:
    writer.writerow([divyield, datetime.now()])

它有效,但只提取数组的最后一项?

非常感谢

【问题讨论】:

  • 您能否添加一些代码,以便我们知道您已经尝试过什么?
  • 我已经添加了我仍然不完整的代码,感谢您的帮助
  • req = urllib2.Request(quote_page, headers=hdr) -- 当它需要一个字符串时,你给它一个列表。
  • 和你的问题没有直接关系,但我很好奇:是什么让你选择了urllib2?
  • 我缺乏经验和学习,所以我查找了示例脚本开始,有没有更好的方法?

标签: python web-scraping


【解决方案1】:

试试 simple_scrapy 的解决方案

from simplified_scrapy.request import req
from simplified_scrapy.simplified_doc import SimplifiedDoc
quote_page = ['https://ycharts.com/companies/AAPL/dividend_yield', 'https://ycharts.com/companies/T/dividend_yield', 'https://ycharts.com/companies/MMM/dividend_yield']

data = []
for pg in quote_page:
  page = req.get(pg)
  doc = SimplifiedDoc(page)
  divyield = doc.getElement('td',attr='class',value='col2').text
  # divyield = doc.select('td.col2>text()')
  data.append((divyield))
print (data)

结果:

[u'0.95%', u'5.34%', u'3.18%']

这里有更多simplified_scrapy的例子here

【讨论】:

  • 谢谢,看起来确实更好。如何使用另一个列表中的符号/代码填充 quote_page 列表,例如ticters = ['AAPL','T','MMM', ... ]?
  • 是这样吗? tickers = ['AAPL','T','MMM'] quote_page = ['ycharts.com/companies{}/dividend_yield'.format(ticker) for tickers in tickers]
猜你喜欢
  • 2018-11-17
  • 2018-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-06
  • 2019-11-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多