使用python进行Web抓取('NoneType'对象没有属性'get\u text')

2024-03-29 12:51:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我想从https://www.medindia.net/doctors/drug_information/abacavir.htm的多个页面中提取多个药物信息, https://www.medindia.net/doctors/drug_information/talimogene_laherparepvec.htm, 等等

在每一页上,我想摘录的信息如下:概述、品牌、处方禁忌、副作用、剂量、如何服用、警告和储存

通过使用漂亮的汤,我能够识别提取所需的类。但是,当我试图提取信息并将信息存储到变量中时,它会显示'NoneType' object has no attribute 'get_text'。似乎没有“药物含量”类别的元素。但是,当我打印项目时,它会显示类。请帮帮我。下面是我的代码:

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_='drug-content')
print(items)

# extract drug information from drug content into individual variable
general = items[0].find(class_='drug-content').get_text(strip=True).replace("\n", "")
brand = items[1].find(class_='report-content').get_text(strip=True).replace("\n", "")
prescription = items[1].find(class_='drug-content').get_text(strip=True).replace("\n", "")
contraindications = items[2].find(class_='drug-content').get_text(strip=True).replace("\n", "")
side_effect = items[2].find(class_='drug-content').get_text(strip=True).replace("\n", "")
dosage = items[3].find(class_='drug-content').get_text(strip=True).replace("\n", "")
how_to_use = items[4].find(class_='drug-content').get_text(strip=True).replace("\n", "")
warnings = items[5].find(class_='drug-content').get_text(strip=True).replace("\n", "")
storage = items[7].find(class_='drug-content').get_text(strip=True).replace("\n", "")

我已尝试将类更改为“ReportContentDrugWidget”。但是,对于该类,我无法提取一般信息。而且这种药也没有副作用。如果药物的信息不可用,我如何将NA放入变量中

# 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
general = items.find(class_='drug-content').get_text(strip=True).replace("\n", "")
brand = items[0].find(class_='drug-content').get_text(strip=True).replace("\n", "")

请建议如何提取信息,以及如何将NA放在我需要的信息不可用的地方


Tags: texthttpsimport信息truegetinformationwww
1条回答
网友
1楼 · 发布于 2024-03-29 12:51:00

我可以帮助您解决第一个问题,它应该可以帮助您开始了解如何处理非查找,以及如何搜索您要查找的模式:

try:
  general = items[0].find('h3', attrs={'style': 'margin:0px!important'}).get_text(strip=True).replace("\n", "").replace("\xa0", " ")
except:
  general = "N/A"

您可以通过以下方式切掉通用名称:因为每个答案的大小可能相同:

general = general[15:]  
print(general):
#'Abacavir'

相关问题 更多 >