我曾经和spark一起工作,他设法自动构建漂亮的桌子。 现在我用python和美丽的汤来摄取药物数据。 这是我的代码,我想建立一个包含所有药物及其相关信息的表格。
我尝试使用" split"因为这些信息与" ---"
但没有得到可读的东西: 请在下面找到代码+结果样本+理想DataFrame的结构
1-代码
import requests
from bs4 import BeautifulSoup
def get_details(url):
print('details:', url)
# get subpage
r = requests.get(url)
soup = BeautifulSoup(r.text ,"lxml")
# get data on subpabe
dts = soup.findAll('dt')
dds = soup.findAll('dd')
# display details
for dt, dd in zip(dts, dds):
print(dt.text)
print(dd.text)
print('---')
print('---------------------------')
def drug_data():
url = 'https://www.drugbank.ca/drugs/'
while url:
print(url)
r = requests.get(url)
soup = BeautifulSoup(r.text ,"lxml")
# get links to subpages
links = soup.select('strong a')
for link in links:
# exeecute function to get subpage
get_details('https://www.drugbank.ca' + link['href'])
# next page url
url = soup.findAll('a', {'class': 'page-link', 'rel': 'next'})
print(url)
if url:
url = 'https://www.drugbank.ca' + url[0].get('href')
else:
break
2 - 输出结构如下:
名称
入藏号
类型
组
描述 5-甲基四氢叶酸是四氢叶酸的甲基化衍生物。它由5,10-亚甲基四氢叶酸的亚甲基四氢叶酸还原酶产生,用于通过5-甲基四氢叶酸 - 高半胱氨酸甲基转移酶(也称甲硫氨酸合酶)将高半胱氨酸再循环回蛋氨酸。
Panda Dataframe应如下所示:
你有什么建议? 最好
答案 0 :(得分:0)
要实现我们的目标,有一些事情要做。首先,您必须将解析后的HTML文件转换为Pandas Dataframes。为此,您可以使用Pandas read_html函数。然后,您必须将每个生成的Pandas Dataframe合并到一个Dataframe中。 要设置输出样式,您可以使用Pandas显示相关选项,因为这取决于您的系统我只是在脚本顶部放置了三个可能的选项。请随时咨询Pandas options以进一步配置。
### Load the pandas library
import pandas as pd
### Set Pandas settings
# Set max number of displayed columns
pd.set_option('display.max_columns', 100)
# Set max column width
pd.set_option('display.max_colwidth', 1000)
# Prevent pandas linebreak
pd.set_option('display.expand_frame_repr', False)
import requests
from bs4 import BeautifulSoup
def get_details(url):
print('details:', url)
# get subpage
r = requests.get(url)
soup = BeautifulSoup(r.text ,"lxml")
### Convert the soup object to string
# than you can parse it directly with pandas
# this returns a list of dfs therefore, fetch the first list item
# return the df to merge it later with the other results
return pd.read_html(str(soup))[0]
def drug_data():
url = 'https://www.drugbank.ca/drugs/'
### Helper list to store the single drugs Pandas Dataframes
listOfDrugDfs = []
while url:
print(url)
r = requests.get(url)
soup = BeautifulSoup(r.text ,"lxml")
# get links to subpages
links = soup.select('strong a')
for link in links:
# exeecute function to get subpage
### Extended to append results of function to listOfDrugDfs
listOfDrugDfs.append(get_details('https://www.drugbank.ca' + link['href']))
# next page url
url = soup.findAll('a', {'class': 'page-link', 'rel': 'next'})
print(url)
if url:
url = 'https://www.drugbank.ca' + url[0].get('href')
else:
break
### Merge single results dfs to one big results dataframe
resultDf = pd.concat(listOfDrugDfs)
### Print results
print(resultDf)
### Or return
#return resultDf
答案 1 :(得分:0)
如果您希望对现有代码进行最简单的扩展,只为DataFrame选择几列,可以使用以下内容作为起点:
git stash
(注意,您网址中的数据存在问题,例如,您可以获得多次点击。'说明')无论如何,希望这可能有所帮助。