我正在收集中央银行研究出版物上的信息,到目前为止,对于美联储,我具有以下Python代码:
START_URL = 'https://ideas.repec.org/s/fip/fedgfe.html'
page = requests.get(START_URL)
soup = BeautifulSoup(page.text, 'html.parser')
for paper in soup.findAll("li",class_="list-group-item downfree"):
print(paper.text)
这为许多出版物中的第一个出版了以下内容:
2018-070可靠地计算非线性动态随机模型 解决方案:带有错误公式的算法,作者:Gary S. Anderson
我现在想将其转换为Python字典,该字典最终将包含大量论文:
Papers = {
'Date': 2018 - 070,
'Title': 'Reliably Computing Nonlinear Dynamic Stochastic Model Solutions: An Algorithm with Error Formulas',
'Author/s': 'Gary S. Anderson'
}
答案 0 :(得分:0)
提取所有后代并仅选择NavigableStrings的后代,我得到了很好的结果。确保从bs4导入 NavigableString 。我还使用了一个numpy列表推导,但是您也可以使用for循环。
START_URL = 'https://ideas.repec.org/s/fip/fedgfe.html'
page = requests.get(START_URL)
soup = BeautifulSoup(page.text, 'html.parser')
papers = []
for paper in soup.findAll("li",class_="list-group-item downfree"):
info = [desc.strip() for desc in paper.descendants if type(desc) == NavigableString]
papers.append({'Date': info[0], 'Title': info[1], 'Author': info[3]})
print(papers[1])
{'Date': '2018-069',
'Title': 'The Effect of Common Ownership on Profits : Evidence From the U.S. Banking Industry',
'Author': 'Jacob P. Gramlich & Serafin J. Grundl'}
答案 1 :(得分:0)
您可以使用正则表达式来匹配字符串的每个部分。
[-\d]+
字符串仅包含数字和-
(?<=\s).*?(?=by)
字符串以空白开头,以by(以作者开头)结尾(?<=by\s).*
作者,其余的整个字符串完整代码
import requests
from bs4 import BeautifulSoup
import re
START_URL = 'https://ideas.repec.org/s/fip/fedgfe.html'
page = requests.get(START_URL,verify=False)
soup = BeautifulSoup(page.text, 'html.parser')
datas = []
for paper in soup.findAll("li",class_="list-group-item downfree"):
data = dict()
data["date"] = re.findall(r"[-\d]+",paper.text)[0]
data["Title"] = re.findall(r"(?<=\s).*?(?=by)",paper.text)[0]
data["Author(s)"] = re.findall(r"(?<=by\s).*",paper.text)[0]
print(data)
datas.append(data)