python – 使用中间件忽略Scrapy中的重复项
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 使用中间件忽略Scrapy中的重复项,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1578字,纯文字阅读大概需要3分钟。
内容图文
我是Python的初学者,我正在使用Scrapy进行人事网络项目.
我使用Scrapy反复从多个网站中提取数据,因此在添加链接之前,如果链接已经在数据库中,我需要检查每次抓取.我是在piplines.py类中完成的:
class DuplicatesPipline(object):
def process_item(self, item, spider):
if memc2.get(item['link']) is None:
return item
else:
raise DropItem('Duplication %s', item['link'])
但我听说使用中间件更适合这项任务.
我发现在Scrapy中使用中间件有点困难,任何人都可以请我重定向到一个好的教程.
建议是受欢迎的.
谢谢,
编辑:
我正在使用MySql和memcache.
根据@Talvalin的回答,这是我的尝试:
# -*- coding: utf-8 -*-
from scrapy.exceptions import IgnoreRequest
import MySQLdb as mdb
import memcache
connexion = mdb.connect('localhost','dev','passe','mydb')
memc2 = memcache.Client(['127.0.0.1:11211'], debug=1)
class IgnoreDuplicates():
def __init__(self):
#clear memcache object
memc2.flush_all()
#update memc2
with connexion:
cur = connexion.cursor()
cur.execute('SELECT link, title FROM items')
for item in cur.fetchall():
memc2.set(item[0], item[1])
def precess_request(self, request, spider):
#if the url is not in memc2 keys, it returns None.
if memc2.get(request.url) is None:
return None
else:
raise IgnoreRequest()
DOWNLOADER_MIDDLEWARES = {
'myproject.middlewares.IgnoreDuplicates': 543,
'scrapy.contrib.downloadermiddleware.httpproxy.HttpProxyMiddleware': 500, }
但似乎在爬行时会忽略process_request方法.
提前致谢,
解决方法:
下面是一些示例中间件代码,它将来自sqlite3表(Id INT,url TEXT)的URL加载到一个集合中,然后检查对该集合的请求URL以确定是否应该忽略该URL.应该使用MySQL和memcache来调整此代码应该是相当简单的,但如果您有任何问题或疑问,请告诉我.
内容总结
以上是互联网集市为您收集整理的python – 使用中间件忽略Scrapy中的重复项全部内容,希望文章能够帮你解决python – 使用中间件忽略Scrapy中的重复项所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。