如何廻圈跑多次scrapy 爬蟲
Day029 爬蟲我在main.py設一個list含兩個PTT看板,然後用FOR廻圈去分別爬兩個看板,但第一看板爬完,第二個看板會失敗.
程式碼跟錯誤訊息如下,請教各位高手這問題要如何解,感謝.
1. main.py
def main():
target_board = ['Tech_Job', 'Stock']
process = CrawlerProcess(get_project_settings())
for board in target_board:
print("board : ", board)
process.crawl('PTTCrawler', board=board)
process.start()
if __name__ == '__main__':
main()
2. Error Msg:
['myproject.pipelines.JSONPipeline']
2020-01-07 11:39:30 [scrapy.core.engine] INFO: Spider opened
2020-01-07 11:39:30 [PTTCrawler] DEBUG: Create temp file for store JSON - C:\Users\chong\Desktop\Python\Python Marathon\Day029_Scrapy_PTT\Day029_Scrapy_PTT\myproject\crawled_data\.tmp.json.swp
2020-01-07 11:39:30 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
2020-01-07 11:39:30 [scrapy.extensions.telnet] INFO: Telnet console listening on 127.0.0.1:6023
Traceback (most recent call last):
File "main.py", line 33, in
main()
File "main.py", line 30, in main
process.start()
File "C:\Users\chong\Anaconda3\lib\site-packages\scrapy\crawler.py", line 309, in start
reactor.run(installSignalHandlers=False) # blocking call
File "C:\Users\chong\Anaconda3\lib\site-packages\twisted\internet\base.py", line 1282, in run
self.startRunning(installSignalHandlers=installSignalHandlers)
File "C:\Users\chong\Anaconda3\lib\site-packages\twisted\internet\base.py", line 1262, in startRunning
ReactorBase.startRunning(self)
File "C:\Users\chong\Anaconda3\lib\site-packages\twisted\internet\base.py", line 765, in startRunning
raise error.ReactorNotRestartable()
twisted.internet.error.ReactorNotRestartable
回答列表
-
2020/01/08 上午 09:56張維元 (WeiYuan)贊同數:2不贊同數:0留言數:0
嗨,你的 process.start() 要放在 for 迴圈的外面哦,從這篇討論來看,start() 只可以被呼叫一次。
-
2020/01/08 下午 04:27葉碩涵贊同數:不贊同數:留言數:
把process.start()放在外面後
只會產生一個.json檔
json檔裡面的內容是Gossiping跟Stock都有
沒辦法分別產生兩個檔案
-
2020/01/08 下午 04:46張維元 (WeiYuan)贊同數:1不贊同數:0留言數:1
「把process.start()放在外面後 只會產生一個.json檔 json檔裡面的內容是Gossiping跟Stock都有 沒辦法分別產生兩個檔案」
=> 嗨,預設的 process 只會產生一個 json 檔案,你可以試試看多個「process」或是自己處理「匯出 JSON」這一段。
-
2020/01/09 上午 00:57張維元 (WeiYuan)贊同數:1不贊同數:0留言數:0
「請問預設的process只會產生一個 json 檔案 這句話是指即使main裡有for迴圈跑兩個版 但他的跑法順序是 1.Gossiping open_spider 2.Stock open_spider 3.Gossiping close_spider 4.Stock close_spider 嗎? 所以後跑的Stock會把Gossiping蓋掉 因為他們在open_spider的取名是一樣的 都是.tmp.json.swp」
=> 我不確定後跑的會覆蓋過去還是繼續寫下去,可能要試一下才知道
-
2020/01/10 下午 02:41小糖果贊同數:0不贊同數:0留言數:0
請問,我已經把process.start() 放在 for 迴圈的外面,可是還是出現了一樣的error?請問是為什麼呢?謝謝您!