为什么itempipeline不在scrapy中工作

时间:2015-05-19 05:21:01

标签: python scrapy

我正在使用scrapy编写一个爬虫来查找大学的所有部门网页。 但似乎我的管道不起作用。有谁知道为什么? 这是我的蜘蛛的代码:

class Univ2deptemorySpider(Spider):
    name = 'univ2deptEmory'

    def __init__(self, url='http://www.emory.edu/', **kw):
        super(Univ2deptemorySpider,self).__init__(**kw)
        self.url = url
        self.allowed_domains = [re.sub(r'^www\.', '', urlparse(url).hostname)]

    def start_requests(self):
        return [Request(self.url, callback=self.find_all_url, dont_filter=False)]

    def find_all_url(self,response):
        if self.check_dept(response):
            self.parse_dept(response)

        links = LinkExtractor().extract_links(response)
        for link in links:
            if len(link.url) < 50:
                yield Request(link.url, callback = self.find_all_url, dont_filter=False)

    def parse_dept(self, response):
        dept = deptItem()
        #did some extraction            
        return dept

    def check_dept(self,response):
        #check whether the given page is a department webpage, if yes, return True, otherwise False 

以下是管道代码:

class deptPipeline(object):
    def __init__(self):
    #connect to a sqlite database 


    def process_item(self, item, spider):
        cur = self.conn.cursor()
        cur.execute('select * from department where deptName=(?)',(item['deptName'],))
        res = cur.fetchall()
        if not (len(res) > 0):
            cur.execute('insert into department(deptName, url, description, photo) values (?,?,?,?) ', (item["deptName"], item['url'], item['description'], item['photo']))
            self.conn.commit()

从日志信息中,我可以看到管道中的__init__工作正常,但永远不会调用process_item

与项目管道相关的设置:

ITEM_PIPELINES = {'advisor.pipelines.deptPipeline': 300}  

顾问是项目的名称。

EDIT1:项目管道在我修改我的蜘蛛代码之前工作,所以我猜问题可能来自蜘蛛。我在parse_deptprocess_item中添加了一些日志记录,似乎在返回之前所有内容都在parse_dept中执行,而在process_item中没有执行任何操作。

0 个答案:

没有答案