python - Python Scrapy在一些请求后停止而没有任何错误
问题描述
我正在尝试使用 Scrapy(2.5.0) Python (3.6.0) 抓取一些数据
Scrapy 适用于大约 70 到 100 的一些 url,它只是在 Spider 关闭(完成)的情况下退出,没有任何错误
但是有超过 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']
}
解决方案
由于 Database Scrapy 中的一些重复默认情况下会跳过该 url 等等,因为 url 是在解析函数中添加的,并且当有重复的 url 时不会调用 purse 函数,所以没有更多的 url 可以抓取scrapy 关闭蜘蛛。
添加 dont_filter= True 解决问题
yield scrapy.Request(url, dont_filter=True, callback=self.parse)
推荐阅读
- javascript - AngularJS ng-model 无法绑定输入值
- python - 试图推送到 Heroku——为什么我会得到这个?错误:找不到满足要求的版本 python-3.8.6
- node.js - 首次关闭后无法重用 node-mongodb-native 客户端
- python - 如何在Python中删除连续重复的单词
- c# - 有没有办法在 C# 中使用 emguCV 比较两张脸?
- javascript - 为什么这个函数获取最大公约数不比较哪个数字更大
- postgresql - 用于 PgAdmin 的 Kubernetes 持久卷挂载
- postgresql - 在颤振中本地连接postgresql
- javascript - 如何在 Vue Js 实例中杀死 setInterval()
- javascript - MailApp BCC 邮件详细信息未显示在已发送文件夹中