使用python进行网页抓取(';非类型';对象没有属性';获取文本';)

使用python进行网页抓取(';非类型';对象没有属性';获取文本';),python,class,web-scraping,Python,Class,Web Scraping,我想从中的多个页面中提取多个药物信息, , 等等 在每一页上,我想摘录的信息如下:概述、品牌、处方禁忌、副作用、剂量、如何服用、警告和储存 通过使用漂亮的汤,我能够识别提取所需的类。但是,当我试图提取信息并将信息存储到变量中时,它显示'NoneType'对象没有属性“get\u text”。似乎没有“药物含量”类别的元素。但是,当我打印项目时,它会显示类。请帮帮我。下面是我的代码: import pandas as pd import requests import urllib.request

我想从中的多个页面中提取多个药物信息, , 等等

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

通过使用漂亮的汤,我能够识别提取所需的类。但是,当我试图提取信息并将信息存储到变量中时,它显示
'NoneType'对象没有属性“get\u 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放在我需要的信息不可用的位置。

我可以帮助您完成第一项,它应该可以帮助您开始了解如何处理未找到的信息,以及如何搜索您要查找的模式:

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'

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

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'

当您发现自己在重复内容块时,首先应该考虑的是使用函数
.find(class='drug-content')。获取文本(strip=True)。replace(“\n”,”)
可能应该在函数中;你现在有一堆有点吓人的短信。谢谢你的建议。我将把它变成一个函数。但它返回html标记。您可以给出任何建议吗?
def extract(items):items.find(class='drug-content')。get_text(strip=True)。replace(“\n”,”)return items dafficient=extract(items[3])print(dafficient)
当您发现自己在重复内容块时,首先应该想到的是使用函数
.find(class='drug-content')。获取文本(strip=True)。replace(“\n”,”)
可能应该在函数中;你现在有一堆有点吓人的短信。谢谢你的建议。我将把它变成一个函数。但它返回html标记。您可以给出任何建议吗?
def extract(items):items.find(class='drug-content')。获取文本(strip=True)。替换(“\n”,”)return items dafficient=extract(items[3])打印(dafficient)
谢谢。如何删除泛型名称。我只想要这个名字。用它更新,因为它可能是同一个词,你可以切掉它。如果您有不止一种类型的单词,我会转而使用regex并在“:”谢谢”之后搜索。您能建议我使用class='drug-content'类了解其他信息吗?谢谢。如何删除泛型名称。我只想要这个名字。用它更新,因为它可能是同一个词,你可以切掉它。如果您有不止一种类型的单词,我会转而使用regex并在“:”谢谢”之后搜索。您是否建议我使用class='drug-content'类了解其他信息?