我正在嘗試使用 Scrapy(2.5.0) Python (3.6.0) 抓取一些資料
Scrapy 適用于一些 70 到 100 左右的 url 后它 Just Quit with Spider closed (finished) 沒有任何錯誤
但是還有超過 200K 的請求要做
import scrapy
from scrapy.linkextractors import LinkExtractor
# import pandas as pd
import pymongo
client = pymongo.MongoClient("mongodb srv://<user>:<Password>@booksmotionscraper.9c8us.mongodb.net/booksmotion?retryWrites=true&w=majority")
db= client.libgen.libgen2
start = True
class lSpider(scrapy.Spider):
name = "libgen_dlink"
start_urls = [
"https://booksmotion.com/main/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
]
def parse(self, response):
global start
link= db.find_one({})
url= 'https://booksmotion.com/main/' link['md5']
yield scrapy.Request(url, callback=self.parse)
# link= list(link)
# print(link)
db.delete_one({'_id': link['_id']})
body= response.css('body')
try:
info={
'md5': response.url.rsplit('/', 1)[-1],
'dlink': body.css('#download > ul > li:nth-child(2) > a').attrib['href']
}
except KeyError:
info={
'md5': response.url.rsplit('/', 1)[-1],
'dlink': 0
}
yield{
'md5': info['md5'],
'dlink': info['dlink']
}
uj5u.com熱心網友回復:
由于資料庫 Scrapy 中的一些重復默認情況下跳過該 url 等等,因為在決議函式中添加了 url,并且當有重復的 url 時不會呼叫錢包函式,因此沒有更多的 url 可以抓取,因此沒有更多的 url 可以抓取和scrapy關閉蜘蛛。
添加 dont_filter= True 解決問題
yield scrapy.Request(url, dont_filter=True, callback=self.parse)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/341163.html
