gpt4 book ai didi

Python:Scrapy start_urls 列表能够处理 .format()?

转载 作者:行者123 更新时间:2023-11-28 21:15:34 25 4
gpt4 key购买 nike

我想解析一个股票列表,所以我试图格式化我的 start_urls 的末尾列表,这样我就可以只添加符号而不是整个 url。

蜘蛛类 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 时在命令行中输入股票代码作为参数。 ???

通常 shell 会打印出 2015-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

最佳答案

实现动态启动 URL 的正确方法是使用 start_request()
当您有起始 URL 的静态列表时,使用 start_urls 是首选做法。

start_requests() This method must return an iterable with the first Requests to crawl for this spider.

例子:

class MySpider(BaseSpider):
name = "dozen"
allowed_domains = ["yahoo.com"]
stock = ["SCMP", "APPL", "GOOG"]

def start_requests(self):
BASE_URL = "http://finance.yahoo.com/q/is?s={}"
yield scrapy.Request(url=BASE_URL.format(s)) for s in self.stock

def parse(self, response):
# parse the responses here
pass

通过这种方式,您还可以使用生成器而不是预先生成的列表,这样在stock 较大的情况下可以更好地扩展。

关于Python:Scrapy start_urls 列表能够处理 .format()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29869581/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com