使用python爬取某藥品網站藥品說明

你瞅一下代碼裏鏈接就知道是啥網站了~
首先聲明:代碼賊亂,因爲功能不復雜,就懶得改了,好使就得
如果你想改完且封裝一下,或者搞個PDF的類庫,更高級,歡迎下邊留言
註釋賊多,還有參考鏈接,有點編程基礎都能瞅懂
–start–
之前jio得不加延時沒有事;
完事就
在這裏插入圖片描述
估計情況不是對方的反制;
而是沒有延時整岔屁遼;
遂小編加了一些sleep;
親測沒事了;
在這裏插入圖片描述
這個蟲子就開始欻欻的跑;
廢話少說,直接上碼;

import re
import requests # 使用網絡模塊
import base64
from bs4 import BeautifulSoup  # 網頁拆分,需要使用pip指令安裝
import time # 導入時間模塊,延時器使用
from splinter import Browser    # 操作瀏覽器模塊,需要pip安裝 
import sys
import urllib.request
# from fontTools.ttLib import TTFont, BytesIO
# 注意:py有着嚴格的縮進管理
    # win下安裝建議使用網址:www.continuum.io/downloads/ 此版本編譯器與Linux一致,錯誤率低
    # 安裝常用套件:使用命令 pip install 
    # requests(網絡模塊)  BeautifulSoup4 jupyter(網頁運行器)
    # 獲取元素:https://blog.csdn.net/chengsw1993/article/details/92633313
    # splinter中文手冊:https://splinter-docs-zh-cn.readthedocs.io/zh/latest/
    # splinter英文手冊:https://splinter.readthedocs.io/en/latest/



# 藥源網頁面 中藥 西藥
url = 'https://www.yaopinnet.com'
zy_url = 'https://www.yaopinnet.com/zhongyao1'
xy_url = 'https://www.yaopinnet.com/huayao1'
# 藥品字母列表
menu_list = ['a','b','c','d','e','f','g','h','j','k','l','m','n','p','q','r','s','t','w','x','y','z']
# 加載chrome
browser = Browser('chrome')
# 準備導出的文件集合
export_file_arr = []
# 藥品計數器
yp_count = 0
# 定位到藥源網藥品查找頁
browser.visit('https://www.yaopinnet.com/tools/sms.asp')
print('瀏覽器已經打開,請檢查是否正確加載藥品查詢頁面,繼續: y')
login_yn = input()
if login_yn == 'y':
    print('請輸入保存文件名:')
    save_file_name = input()
    print('開始檢索中藥說明書……')
    # 循環List
    for idx in range(0, len(menu_list)):
        time.sleep(3)
        # 獲得當前頁面地址 https://www.yaopinnet.com/zhongyao1/a1.htm
        curr_zy_url = xy_url + '/' + menu_list[idx] + str(1) + '.htm'
        # 瀏覽器打開第一頁
        browser.visit(curr_zy_url)
        time.sleep(3)
        # 獲得當前頁面總的分頁數(分頁標記最後一個元素)
        curr_page_max_len = browser.find_by_xpath('//*[@id="sms_page"]/a[position()=last()]').value
        # 開始循環分頁內容
        for idx_pg in range(0, int(curr_page_max_len)):
            # 拼接分頁url
            curr_zy_pg_url = xy_url + '/' + menu_list[idx] + str(idx_pg + 1) + '.htm'
            # 打開第一個分頁
            browser.visit(curr_zy_pg_url)
            time.sleep(3)
            # 開始讀取頁面
            page = urllib.request.urlopen(curr_zy_pg_url).read()
            soup = BeautifulSoup(page, 'html.parser')
            # 當前頁面所有藥品的鏈接地址 /zhongyao/zy4644x.htm
            link_arr = []
            for obj in soup.find_all('li'):
                links = obj.a.get("href")
                link_arr.append(links)
            # 逐個打開鏈接進行讀取藥品說明書
            for obj_idx in range(0, len(link_arr)):
                read_yp_url = url + link_arr[obj_idx]
                # browser.visit(read_yp_url)
                # time.sleep(1)
                # 正式開始讀取當前藥品
                time.sleep(1)
                page_yp = urllib.request.urlopen(read_yp_url).read()
                soup_yp = BeautifulSoup(page_yp, 'html.parser')
                # 獲得藥品名
                ypm = soup_yp.select('h1[class="yaopinming"]')[0].get_text()
                # 追加到數組
                yp_count = yp_count + 1
                export_file_arr.append(str(yp_count) + '.' + ypm)
                # 遍歷藥品詳情
                for ypxq_item in soup_yp.select('li[class="smsli"]'):
                    export_file_arr.append(' ' + ypxq_item.get_text())
                export_file_arr.append(' ------ ')
                print_str = '正在執行檢索,當前第:' + str(yp_count) + '個藥品正在檢索……'
                print(print_str, end = "")
                print("\b" * (len(print_str)*2), end = "", flush = True)
    # d.執行導出
    print('開始嘗試導出數據到:' + save_file_name)
    with open("./" + save_file_name + ".txt", 'a', encoding='utf-8') as f:
        row = len(export_file_arr)   # 數組長度
        out_txt = ''
        for idx_f in range(row):
            out_txt += export_file_arr[idx_f] + '\n'
        f.write(out_txt)
    print('導出成功!!文件名爲:' + save_file_name)
    sys.exit()

注:使用的時候,注意根據第22、23行的藥品url(中西藥分開)修改第44行和第53行
假如你瞅那個sleep不順眼,你用random也行,頂上import一下,然後random。random()*3 這樣顯得“更自然”
有些類庫是不帶滴,因此,不帶的類庫您自己使用pip指令安裝一下即可
py環境安裝我想不必多說
另外,改麼改麼可以另做他用,因此才分享了一下~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章