python 网页抓取(如果使用所有标量值,则必须传递索引)
python web scraping (If using all scalar values, you must pass an index)
我正在尝试使用 python 进行网络抓取。当我尝试创建一个数据框来存储带有提取信息的变量时,它显示“ValueError:如果使用所有标量值,则必须传递一个索引”。我已经通过尝试索引{'trade_name':trade_name}, index=[0])
来检查本网站中其他相关的post,但仍然无法解决。请帮忙。
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()
总是 return 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],
然后它在没有警告的情况下工作。
如果不使用 []
,那么它可能会将 trade_name
、storage
中的字符串视为字符列表,并将每个字符放在单独的行中。因为字符串具有不同数量的字符,所以它们会创建不同数量的行,这可能会产生问题并显示警告。
顺便说一句:您可以使用 get_text(strip=True)
从文本中删除一些无用的空格、制表符和输入。
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 = items[0].find(class_='drug-content').get_text(strip=True)
function = items[1].find(class_='drug-content').get_text(strip=True)
contraindications = items[2].find(class_='drug-content').get_text(strip=True)
dosage = items[3].find(class_='drug-content').get_text(strip=True)
how_to_use = items[4].find(class_='drug-content').get_text(strip=True)
warnings = items[5].find(class_='drug-content').get_text(strip=True)
storage = items[7].find(class_='drug-content').get_text(strip=True)
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)
我正在尝试使用 python 进行网络抓取。当我尝试创建一个数据框来存储带有提取信息的变量时,它显示“ValueError:如果使用所有标量值,则必须传递一个索引”。我已经通过尝试索引{'trade_name':trade_name}, index=[0])
来检查本网站中其他相关的post,但仍然无法解决。请帮忙。
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()
总是 return 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],
然后它在没有警告的情况下工作。
如果不使用 []
,那么它可能会将 trade_name
、storage
中的字符串视为字符列表,并将每个字符放在单独的行中。因为字符串具有不同数量的字符,所以它们会创建不同数量的行,这可能会产生问题并显示警告。
顺便说一句:您可以使用 get_text(strip=True)
从文本中删除一些无用的空格、制表符和输入。
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 = items[0].find(class_='drug-content').get_text(strip=True)
function = items[1].find(class_='drug-content').get_text(strip=True)
contraindications = items[2].find(class_='drug-content').get_text(strip=True)
dosage = items[3].find(class_='drug-content').get_text(strip=True)
how_to_use = items[4].find(class_='drug-content').get_text(strip=True)
warnings = items[5].find(class_='drug-content').get_text(strip=True)
storage = items[7].find(class_='drug-content').get_text(strip=True)
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)