【发布时间】:2020-03-19 08:43:00
【问题描述】:
我正在尝试使用 python 进行网络抓取。当我尝试创建一个数据框来存储带有提取信息的变量时,它显示“ValueError:如果使用所有标量值,则必须传递一个索引”。我已经通过尝试索引{'trade_name':trade_name}, index=[0])查看了本网站的其他相关帖子,但仍然无法解决。请帮忙。
import pandas as pd
import requests
import urllib.request
import time
from bs4 import BeautifulSoup
url = 'https://www.medindia.net/doctors/drug_information/abacavir.htm'
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")
drug = soup.find(class_='mi-container__fluid')
print(drug)
# whole page contain drug content
items = drug.find_all(class_='report-content drug-widget')
print(items)
# extract drug information from drug content into individual variable
trade_name = print(items[0].find(class_='drug-content').get_text())
function = print(items[1].find(class_='drug-content').get_text())
Contraindications = print(items[2].find(class_='drug-content').get_text())
Dosage = print(items[3].find(class_='drug-content').get_text())
how_to_use = print(items[4].find(class_='drug-content').get_text())
warnings = print(items[5].find(class_='drug-content').get_text())
storage = print(items[7].find(class_='drug-content').get_text())
drug_stuff = pd.DataFrame(
{
'trade_name':trade_name,
'function': function,
'Contraindications': Contraindications,
'Dosage': Dosage,
'how_to_use':how_to_use,
'warnings':warnings,
'storage':storage,
})
print(drug_stuff)
【问题讨论】:
-
print()总是返回None- 所以trade_name = print( ...)像trade_name = None一样工作。删除print()以将值分配给变量trade_name = items[0].find(class_='drug-content').get_text() -
我已经完成了删除打印,但在尝试使用变量创建数据框时仍然显示相同的错误。
-
要创建
DataFrame,你必须使用带有元素的列表——即使你只有一个元素——'trade_name': [trade_name], ..., 'storage': [storage],——然后它会在没有警告的情况下工作 -
谢谢。那解决了我的问题。现在我需要知道如何清除数据中的换行符。
-
也许是
get_text(strip=True)。最终text = text.replace("\n", "")