【爬虫】丁香医生网站所有疾病信息

本文介绍了如何使用Selenium和BeautifulSoup处理JavaScript动态加载的医疗网站数据,通过模拟浏览器行为抓取心血管内科A、B开头的疾病列表和详情,展示了从网页抓取、解析到数据存储的完整过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先看代码运行结果,为方便测试、减少循环次数,只爬取了心血管内科A、B开头的六种疾病数据。
在这里插入图片描述

总体思路

“查疾病”这部分内容按科室分类,各个科室网站不同。在最初尝试中,我使用 requests 库获取网页内容,但发现获取到的 HTML 源码与我在网站上通过开发者模式查看到的代码不一致。经过 GPT 解释,网站采用 JavaScript 进行动态加载内容,而我所获取的仅仅是初始加载时的 HTML 源码,不包含通过 JavaScript 动态生成的内容。

因此,我转向使用 Selenium 模拟浏览器行为。这也为我解决在网页不发生跳转的情况下,如何获取每个首字母下的疾病列表提供了思路。

为了获取每个科室下按疾病首字母分类的疾病列表,我编写了程序自动点击每个字母按钮,获取相应的动态源码。随后,我通过循环对这些源码进行解析,提取了详细介绍每个疾病的网站跳转链接。

最后的工作就是对每个疾病页面进行解析,获取了相关的疾病信息。

函数说明

  1. get_static_url_content_after_click(driver, url, button_text)

    • 作用:使用 Selenium WebDriver 模拟点击操作后获取静态网页内容。
    • 参数:
      • driver: WebDriver对象,用于控制浏览器。
      • url: 要打开的网页URL。
      • button_text: 页面中的按钮文本。
    • 返回:BeautifulSoup对象,包含解析后的页面内容。
  2. start_crawler(subject)

    • 作用:开始爬取特定科室的链接。
    • 参数:
      • subject: 科室的编号或名称。
    • 返回:包含科室链接列表的列表。
  3. get_static_url_content(url)

    • 作用:使用 Selenium WebDriver 获取指定 URL 的静态网页内容。
    • 参数:
      • url (str): 要获取内容的网页链接。
    • 返回:BeautifulSoup对象,用于解析HTML。
  4. get_disease_info(url)

    • 作用:获取特定疾病的详细信息。
    • 参数:
      • url: 疾病页面的链接。
    • 返回:包含疾病信息的字典或其他数据结构。
  5. write_to_file(file_name, content)

    • 作用:将内容写入指定的文件(追加模式)。
    • 参数:
      • file_name (str): 要写入的文件的名称。
      • content (dict): 要写入文件的内容,这里假设是一个字典。
    • 返回:无。

main函数调用逻辑

  1. 创建一个映射字典 subject_mapping 用于科室编号和名称的映射。
  2. 创建一个字典 all_subject_links 用于存储每个科室的疾病链接。
  3. 针对每个科室,调用 start_crawler 函数获取疾病链接,并存储在 all_subject_links 字典中。
  4. 对于每个科室,循环遍历其链接,然后对每个链接调用 get_disease_info 函数获取疾病信息,最后调用 write_to_file 函数将疾病信息以 JSON 格式写入文件中。

代码

from bs4 import BeautifulSoup
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import json


def get_static_url_content_after_click(driver, url, button_text):
    """
    使用 Selenium WebDriver 模拟点击操作后获取静态网页内容。

    Parameters:
    - driver: WebDriver对象,用于控制浏览器
    - url: 要打开的网页URL
    - button_text: 页面中的按钮文本

    Returns:
    - bsObj: BeautifulSoup对象,包含解析后的页面内容
    """
    # 打开网页
    driver.get(url)

    # 使用 WebDriverWait 等待页面元素加载
    button = WebDriverWait(driver, 10).until(
        EC.visibility_of_element_located((By.XPATH,
                                          f"//div[@class='tag-button' and text()='{
     button_text
爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL可以通过链接分析、站点地图、搜索引擎等方式获取。 请求网页: 爬虫使用HTTP或其他协议向目标URL发起请求,获取网页的HTML内容。这通常通过HTTP请求库实现,如Python中的Requests库。 解析内容: 爬虫对获取的HTML进行解析,提取有用的信息。常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。 遵守规则: 为避免对网站造成过大负担或触发反爬虫机制,爬虫需要遵守网站的robots.txt协议,限制访问频率和深度,并模拟人类访问行为,如设置User-Agent。 反爬虫应对: 由于爬虫的存在,一些网站采取了反爬虫措施,如验证码、IP封锁等。爬虫工程师需要设计相应的策略来应对这些挑战。 爬虫在各个领域都有广泛的应用,包括搜索引擎索引、数据挖掘、价格监测、新闻聚合等。然而,使用爬虫需要遵守法律和伦理规范,尊重网站的使用政策,并确保对被访问网站的服务器负责。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值