【发布时间】:2019-04-26 06:27:21
【问题描述】:
我正在尝试将蜘蛛部署到 scrapinghub,但无法弄清楚如何解决数据输入问题。我需要从 csv 中读取 ID,并将它们附加到我的起始 url,作为蜘蛛爬行的列表理解:
class exampleSpider(scrapy.Spider):
name = "exampleSpider"
#local scrapy method to extract data
#PID = pd.read_csv('resources/PID_list.csv')
#scrapinghub method
csvdata = pkgutil.get_data("exampleSpider", "resources/PID_list.csv")
start_urls = ['http://www.example.com/PID=' + str(x) for x in csvdata]
需求文件和 pkgutil.get_data 部分有效,但我坚持将数据 IO 转换为列表。将数据调用转换为列表推导的过程是什么?
编辑: 谢谢!这让我走了90%的路!
class exampleSpider(scrapy.Spider):
name = "exampleSpider"
#local scrapy method to extract data
#PID = pd.read_csv('resources/PID_list.csv')
#scrapinghub method
csvdata = pkgutil.get_data("exampleSpider", "resources/PID_list.csv")
csvio = StringIO(csvdata)
raw = csv.reader(csvio)
# TODO : update code to get exact value from raw
start_urls = ['http://www.example.com/PID=' + str(x[0]) for x in raw]
str(x) 需要 str(x[0]) 作为快速修复,因为循环在 url 编码中读取方括号,这会破坏链接:
str(x) 导致“http://www.example.com/PID=%5B'0001'%5D”
但str(x[0]) 将其从列表括号中取出:“http://www.example.com/PID='0001'”
【问题讨论】:
-
PID_list.csv 长什么样子?你能包括几行吗?
-
列表是一个 csv,看起来像:0001,0002,0003
-
这看起来像一个逗号分隔列表(项目在同一行,用逗号分隔),而不是 CSV(行由换行符分隔,列由分隔符分隔,如逗号)。您能否确认该文件实际上是一个以命令分隔的 ID 列表?
标签: python scrapy scrapinghub