账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    Python3 Scrapy框架中进入callback函数,但第一级取的值存入数据库中都重复
    14
    0

    -- coding: utf-8 --

    import scrapy,re
    from scrapy.selector import Selector
    from scrapy.http import Request
    from novelspider.items import NovelspiderItem
    import re

    class novelSpider(scrapy.Spider):

    name = 'novelSpider'
    allowed_domains = ["www.tibetif.com"]
    url = "http://www.tibetif.com/index.php?m=content&c=index&a=lists&catid=955"
    start_urls = [url]
    
    def parse(self, response):
        item = NovelspiderItem()
        list = response.xpath(".//table[@class='proinfo']/tbody/tr")
        for i in range(2,len(list)):
            item['projectNo'] = list[i].xpath(".//td/text()").extract()[0].strip()
            item['url'] = list[i].xpath(".//td[2]/a/@href").extract()[0]
            item['title'] = list[i].xpath(".//td[2]/a/text()").extract()[0]
            item['money'] = list[i].xpath(".//td[4]/text()").extract()[0]
            item['date'] = list[i].xpath(".//td[5]/text()").extract()[0]
            yield scrapy.Request(item['url'],meta={'item':item},callback=self.detail)
    
    def detail(self,response):
        item = response.meta['item']
        selector = Selector(response)
        text = selector.xpath(".//div[@class='wrapper']/table[3]").xpath('string(.)').extract()[0].replace("\n"," ").replace("\t"," ").replace("\r"," ").strip('\n').strip('\t').strip('\r').lstrip().rstrip()
        print(item['title'])
        companyObj = re.search(r'标的企业名称\s*(\S+)',text)
        if companyObj:
            item['company'] = str(companyObj.group(1))
        priceObj = re.search(r'注册资本\(元\)\s*(\S+)',text)
        if priceObj:
            item['price'] = str(priceObj.group(1))
        return item
        
        

    问题:Python3 Scrapy框架中不进入yield scrapy.Request(item['url'],meta={'item':item},callback=self.detail)中的callback=self.detail函数,导致数据库中在parse函数中取得的值都是最后一个页面的值

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 灵魂流浪者 普通会员 1楼

      在Scrapy框架中,如果你想要进入回调函数,但第一级取的值存入数据库中都重复,你需要确保你的Scrapy项目有正确的数据库配置。

      在Scrapy项目的settings.py文件中,你需要设置数据库的相关配置。例如,如果你使用的是SQLite数据库,你可以设置数据库的URL、数据库名、表名等。

      在Scrapy项目的settings.py文件中,你需要设置数据库的相关配置。例如,如果你使用的是SQLite数据库,你可以设置数据库的URL、数据库名、表名等。

      然后,你需要在回调函数中,通过以下方式获取数据库中的数据:

      python def callback(request): # 获取数据库中的数据 data = Database.objects.get(id=your_id) # 这里你可以对数据进行处理 # ...

      请注意,你需要确保你的数据库配置正确,并且数据的获取方法是正确的。

      此外,你还需要确保你的数据库中没有重复的数据。如果你发现有重复的数据,你可能需要删除重复的数据,或者使用其他的方法来处理重复的数据。

      最后,如果你在回调函数中遇到了任何问题,你可以在你的Scrapy项目中使用日志来帮助你。你可以在settings.py文件中添加日志设置,或者在回调函数中添加日志打印语句。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部