可以把每一个步骤的代码都给我吗?
时间: 2024-04-05 19:32:46 浏览: 16
当然可以,以下是完整的代码实现,包括获取中药数据、提取基原信息以及分类分析:
```python
import requests
from bs4 import BeautifulSoup
# 获取中药数据
def get_data():
url = "http://www.zhongyao365.com/zycd/index.htm"
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")
links = soup.select(".diseaselist a")
data = []
for link in links:
data.append({
"name": link.text.strip(),
"url": "http://www.zhongyao365.com/zycd/" + link["href"]
})
return data
# 提取基原信息
def extract_origin(url):
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")
trs = soup.select(".yaopin td[valign=top] table tr")
origin = None
for tr in trs:
if "基原" in tr.text:
origin = tr.find_all("td")[1].text.strip()
break
return origin
# 分类分析基原信息
def analyze_origin(data):
same_all = []
same_class = {}
same_genus = {}
diff_genus = []
for item in data:
origin = extract_origin(item["url"])
if not origin:
continue
origin_parts = origin.split(";")[0].split(",")
if len(origin_parts) == 1:
same_all.append(item["name"])
elif len(origin_parts) == 2:
if origin_parts[0] in same_class:
same_class[origin_parts[0]].append(item["name"])
else:
same_class[origin_parts[0]] = [item["name"]]
elif len(origin_parts) == 3:
if origin_parts[0] in same_genus:
same_genus[origin_parts[0]].append(item["name"])
else:
same_genus[origin_parts[0]] = [item["name"]]
else:
diff_genus.append(item["name"])
print("同科同属同种:")
print(same_all)
print("同科同属不同种:")
for key, value in same_class.items():
print(key + ":")
print(value)
print("同科不同属:")
for key, value in same_genus.items():
print(key + ":")
print(value)
print("科属种均不同:")
print(diff_genus)
# 主函数
def main():
data = get_data()
analyze_origin(data)
if __name__ == "__main__":
main()
```
在以上代码中,`get_data()`函数用于获取所有的中药数据,返回一个包含中药名称和链接的字典列表。`extract_origin(url)`函数用于提取某个中药的基原信息。`analyze_origin(data)`函数用于对所有中药的基原信息进行分类分析。最后,`main()`函数用于调用以上三个函数,并输出分类分析结果。