使用python进行网页抓取(“ NoneType”对象没有属性“ get_text”)

时间:2019-11-25 18:59:50

标签: python class web-scraping

我想从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", "")

我已经尝试将类别更改为“报告内容毒品小部件”。但是,在该课程中,我无法提取常规信息。而且该药物也没有副作用。如果药物信息不可用,如何将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", "")

请建议如何提取信息,以及如何在无法获得所需信息的地方放置不适用。

1 个答案:

答案 0 :(得分:0)

我可以为您提供第一个帮助,它应该帮助您开始如何处理未找到的内容以及如何搜索所需的模式:

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'