我想解析一个股票清单,所以我试图格式化start_urls
清单的末尾,这样我就可以添加符号而不是整个网址。
带start_urls
内部stock_list
方法的蜘蛛类:
class MySpider(BaseSpider):
symbols = ["SCMP"]
name = "dozen"
allowed_domains = ["yahoo.com"]
def stock_list(stock):
start_urls = []
for symb in symbols:
start_urls.append("http://finance.yahoo.com/q/is?s={}&annual".format(symb))
return start_urls
def parse(self, response):
hxs = HtmlXPathSelector(response)
revenue = hxs.select('//td[@align="right"]')
items = []
for rev in revenue:
item = DozenItem()
item["Revenue"] = rev.xpath("./strong/text()").extract()
items.append(item)
return items[0:3]
如果我摆脱的限制,它们都可以正常运行,stock_list
并且start_urls
像往常一样简单,但是由于它当前不会导出比空文件更多的内容。
另外,我是否应该尝试sys.arv
安装程序,以便在运行时只在命令行上输入股票代码作为参数$ scrapy crawl dozen -o items.csv
?
通常,shell2015-04-25 14:50:57-0400 [dozen] DEBUG: Crawled (200) <GET http://finance.yahoo.com/q/is?s=SCMP+Income+Statement&annual>
在LOG / DEBUG打印输出中打印出来,但是当前不包括它,这意味着它没有正确格式化start_urls
我将使用for循环,如下所示:
class MySpider(BaseSpider):
stock = ["SCMP", "APPL", "GOOG"]
name = "dozen"
allowed_domains = ["yahoo.com"]
def stock_list(stock):
start_urls = []
for i in stock:
start_urls.append("http://finance.yahoo.com/q/is?s={}".format(i))
return start_urls
start_urls = stock_list(stock)
然后像我在底部那样分配函数调用。
使用Scrapy 0.24
# -*- coding: utf-8 -*-
import scrapy
from scrapy.selector import Selector
class MySpider(scrapy.Spider):
symbols = ["SCMP"]
name = "yahoo"
allowed_domains = ["yahoo.com"]
def stock_list(symbols):
start_urls = []
for symb in symbols:
start_urls.append("http://finance.yahoo.com/q/is?s={}&annual".format(symb))
return start_urls
start_urls = stock_list(symbols)
def parse(self, response):
revenue = Selector(response=response).xpath('//td[@align="right"]').extract()
print(revenue)
您可能想要调整xpath以获得所需的确切内容。似乎正在撤回相当多的东西。但我已经对此进行了测试,并且抓取效果符合预期。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句