Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

爬取结果问题 #3

Open
ChrisLiang2020 opened this issue Oct 21, 2020 · 14 comments
Open

爬取结果问题 #3

ChrisLiang2020 opened this issue Oct 21, 2020 · 14 comments

Comments

@ChrisLiang2020
Copy link

ChrisLiang2020 commented Oct 21, 2020

爬取的结果中,重复爬取查询到的所有数据中的最后一条数据,查询到的其他结果未爬取存入文件中,导致缺少大量数据

@junmo2
Copy link

junmo2 commented Oct 26, 2020

目测是因为__init__.py中format_context方法的context字典对象每次使用的同一个,导致数组中每次都保持同一个对象,结果相同,把context赋值放到下面的for循环里保证每次运行都有新的OrderedDict对象即可。

image
最简单的改法可以把

        context = OrderedDict()

        for each in header:
            context[each] = ''    

放到

        for data in query_result:
            for row in data['data']['resultsData']:
                tmp = dict(zip(header, row[1:]))
                context.update(tmp)

下面
结果为

        header = '项目名称 批准号 项目类别 依托单位 项目负责人 资助经费(万元) 批准年度 关键词 是否结题 研究成果(期刊论文;会议论文;著作;奖励;专利) 依托单位ID 项目负责人ID 项目类别代码 申请代码 起止年月'.split()
  

        for data in query_result:
            for row in data['data']['resultsData']:
                tmp = dict(zip(header, row[1:]))
				context = OrderedDict()

                for each in header:
                    context[each] = ''   
                context.update(tmp)

                conclusion_context = {}
                if context['是否结题'] == 'true':
                    conclusion_context = self.conclusion_project(context['批准号'])

@ChrisLiang2020
Copy link
Author

我试了一下,这样改不能解决问题,问题似乎不在这里

@NothingOffice
Copy link

我试了一下,这样改不能解决问题,问题似乎不在这里

我试了一下是可以的,上面context = OrderedDict()这一行的缩进需要调整一下,然后就没有重复值了

@ChrisLiang2020
Copy link
Author

ChrisLiang2020 commented Oct 27, 2020

    for data in query_result:
        for row in data['data']['resultsData']:
            tmp = dict(zip(header, row[1:]))
            context = OrderedDict()

            for each in header:
                context[each] = ''
            context.update(tmp)

            conclusion_context = {}
            if context['是否结题'] == 'true':
                conclusion_context = self.conclusion_project(context['批准号'])

然后在dos命令框中用 pip setup.py install,这样对吗

@NothingOffice
Copy link

我是直接打开了__init__.py,把这段代码替换了,并没有重新执行install

@ChrisLiang2020
Copy link
Author

ChrisLiang2020 commented Oct 27, 2020

运行成功了,在dos命令框去切换到nsfc-master,使用pip install .

@NothingOffice
Copy link

名称是__init__.py的这个文件

@ChrisLiang2020
Copy link
Author

ChrisLiang2020 commented Oct 27, 2020

这个文件运行的结果不是爬取下来的数据,而且输入的代码分类的子代码分类,那个结果本来就是对的

@NothingOffice
Copy link

这个文件运行的结果不是爬取下来的数据,而且输入的代码分类的子代码分类,那个结果本来就是对的

当然不是,这个py文件替换过后,在命令提示符里输入查阅指令才会爬取,作者给出的有示例的

@ChrisLiang2020
Copy link
Author

那你之前没有输入查阅指令爬取是怎么判断数据重复的问题解决了,运行了里面的__init__.py又无法输入指令爬取数据

@junmo2
Copy link

junmo2 commented Oct 27, 2020

那你之前没有输入查阅指令爬取是怎么判断数据重复的问题解决了,运行了里面的__init__.py又无法输入指令爬取数据

并不是重复爬取数据啊大哥……你可以自己修改代码打印一下看看,结果是对的,只不过重复使用同一个OrderedDict()对象了……

@junmo2
Copy link

junmo2 commented Oct 27, 2020

    for data in query_result:
        for row in data['data']['resultsData']:
            tmp = dict(zip(header, row[1:]))
            context = OrderedDict()

            for each in header:
                context[each] = ''
            context.update(tmp)

            conclusion_context = {}
            if context['是否结题'] == 'true':
                conclusion_context = self.conclusion_project(context['批准号'])

然后在dos命令框中用 pip setup.py install,这样对吗

你修改之后再重新install就覆盖掉修改了啊大哥

@ChrisLiang2020
Copy link
Author

我知道的,我运行成功了,我的意思是要install才能爬取数据,才能知道问题有没有解决

@suqingdong
Copy link
Owner

suqingdong commented Nov 2, 2020

@ChrisLiang2020 @junmo2 @NothingOffice

BUG已修复,可以重新安装下:

pip install -U nsfc==1.0.4

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants