Pet*_*yel 5 python generator google-scholar
我正在使用scholarlypython 中的模块来搜索关键字。我正在返回一个生成器对象,如下所示:
import pandas as pd
import numpy as np
import scholarly
search_query = scholarly.search_keyword('Python')
print(next(search_query))
{'_filled': False,
'affiliation': 'Juelich Center for Neutron Science',
'citedby': 75900,
'email': '@fz-juelich.de',
'id': 'zWxqzzAAAAAJ',
'interests': ['Physics', 'C++', 'Python'],
'name': 'Gennady Pospelov',
'url_picture': 'https://scholar.google.com/citations?view_op=medium_photo&user=zWxqzzAAAAAJ'}
Run Code Online (Sandbox Code Playgroud)
我想访问元素“citedby”,但是当我尝试next(search_query)['citedby']这样做时,它会返回TypeError: 'Author' object is not subscriptable.
我的问题是如何访问生成器对象中的元素?以及如何将该对象转换为 Pandas 数据框?
这不是发电机问题。生成器生成的对象不是字典。
诚然,该scholary库通过为Author您提供的实例提供类似字典的字符串转换,并且没有实际记录该类支持哪些 API,并没有什么帮助。
表示中的每个“键”Author实际上是对象的一个属性:
author = next(search_query)
print(author.citedby)
Run Code Online (Sandbox Code Playgroud)
您可以使用vars()以下函数获取对象的字典:
author_dict = vars(author)
Run Code Online (Sandbox Code Playgroud)
不过,数据不一定直接映射到数据帧。例如,该列表如何interests在数据框表格数据结构中表示?而且您也不想包含内部属性(这是一个记录是否已被调用的_filled标志)。author.fill()
也就是说,您可以通过将生成器映射到函数上来从字典创建数据框vars:
search_query = scholarly.search_keyword('Python')
df = pd.DataFrame(map(vars, search_query))
Run Code Online (Sandbox Code Playgroud)
然后_filled根据需要删除该列,并将该interests列转换为更结构化的内容,例如具有 0 / 1 值或类似值的单独列。
请注意,这会很慢,因为scholarly库会按顺序分页 Google 搜索结果,并且库会故意以每次 5-10 秒的随机睡眠间隔来延迟请求,以避免 Google 阻止请求。因此,您必须要有耐心,因为Python关键字搜索很容易会产生近 30 页的结果。
| 归档时间: |
|
| 查看次数: |
2520 次 |
| 最近记录: |