В настоящее время я пытаюсь собрать данные из исследовательской базы данных - ScienceDirect. Я получаю название каждой исследовательской статьи, используя Beautiful Soup, и добавляю его в пустой фрейм данных панд. После этого я получаю информацию о типе исследовательской статьи для вышеуказанных статей. Однако, когда я пытаюсь добавить эти данные в фрейм данных, они добавляются в нижнюю часть, т.е. Вместо добавления к первым 100 строкам создается 100 новых строк.
from bs4 import BeautifulSoup as bs
soup = bs(requests.get(browser.current_url).text,"html.parser")
# Using soup to retrieve the elements related to Title, Type of Article, Names of Authors and Abstract
elements = soup.find_all("div", {"class","result-item-content"})
data = pd.DataFrame(columns = ["Abstract","Journal & Dates","Names of Authors","Title","Type of Article"])
for element in elements:
atag = element.find('a')
if atag:
atag = atag.text.split("\n")
data = data.append({"Title": atag}, ignore_index=True)
data.head()
Abstract Journal & Dates Names of Authors Title Type of Article
0 NaN NaN NaN [Morphological, molecular identification and p... NaN
1 NaN NaN NaN [Assessment of soil erosion in a tropical moun... NaN
2 NaN NaN NaN [Ethnomedicinal assessment of Irula tribes of ... NaN
3 NaN NaN NaN [Latitudinal variation in summer monsoon rainf... NaN
4 NaN NaN NaN [IUCN greatly underestimates threat levels of ... NaN
Теперь я пытаюсь найти информацию о типе исследовательской статьи и добавляю ее к указанному выше фрейму данных.
for element in elements:
art_type = element.find("ol",{"class","OpenAccessArchive hor"})
if art_type:
art_type = art_type.text.split("\n")
data = data.append({"Type of Article": art_type}, ignore_index=True)
data.tail()
Abstract Journal & Dates Names of Authors Title Type of Article
194 NaN NaN NaN NaN [Open access, Research article, ]
195 NaN NaN NaN NaN [Research article, ]
196 NaN NaN NaN NaN [Research article, ]
197 NaN NaN NaN NaN [Research article, ]
198 NaN NaN NaN NaN [Research article, ]
Если вы странно смотрите на конец информационного кадра, он добавляет информацию к последним 100 или 90 строкам. Как мне это исправить?
Кроме того, я новичок в выскабливании и питоне. Любые предложения о том, что было бы лучшим способом для хранения данных, чтобы я мог провести анализ того же позже? Например, вероятностное моделирование тем?
РЕДАКТИРОВАТЬ на основе ответа, я попробовал следующее, но я получаю ошибку:
data_dict = {}
# Create keys
for key in ["Abstract","Journal & Dates","Names of Authors","Title","Type of Article"]:
data_dict[key] = []
# Loop through the elements object
for element in elements:
# Find all the Title tags
atag = element.find('a')
if atag:
atag = atag.text.split("\n")
data_dict["Title"].append(atag)
# Find all article_type information
art_type = element.find("ol",{"class","OpenAccessArchive hor"})
if art_type:
art_type = art_type.text.split("\n")
data_dict["Type of Article"].append(art_type)
# Find Names of Authors
author = element.find("ol",{"class","Authors hor undefined"})
if author:
author = author.text.split("\n")
data_dict["Names of Authors"].append(author)
# Find Journal Name
journal = element.find("ol",{"class","SubType hor"})
if journal:
journal = journal.text.split("\n")
data_dict["Journal & Dates"].append(journal)
data = pd.DataFrame(data_dict)
*ERROR*
~/miniconda/lib/python3.6/site-packages/pandas/core/frame.py in extract_index(data)
6209 lengths = list(set(raw_lengths))
6210 if len(lengths) > 1:
-> 6211 raise ValueError('arrays must all be same length')
6212
6213 if have_dicts:
ValueError: все массивы должны быть одинаковой длины