【发布时间】:2022-01-03 19:55:15
【问题描述】:
我有一个简单的 selenium python 应用程序,我正在尝试通过网络抓取类别,即链接。我遇到的问题是使用 xpath 将左窗格上的链接作为列表通过。此外,我想捕获线类:消化道和代谢/id:A/类类型:ATC1-4/显示上下文,但我不知道从哪里开始,因为它不显示在html 或 chrome 开发工具。
我正在从以下网站提取数据:
https://mor.nlm.nih.gov/RxClass/search?query=ALIMENTARY%20TRACT%20AND%20METABOLISM%7CATC1-4&searchBy=class&sourceIds=a&drugSources=atc1-4%7Catc%2Cepc%7Cdailymed%2Cmeshpa%7Cmesh%2Cdisease%7Cmedrt%2Cchem%7Cdailymed%2Cmoa%7Cdailymed%2Cpe%7Cdailymed%2Cpk%7Cmedrt%2Ctc%7Cfmtsme%2Cva%7Cva%2Cdispos%7Csnomedct%2Cstruct%7Csnomedct%2Cschedule%7Crxnorm
我当前的代码是未注释的有效代码:
from selenium import webdriver
import pandas as pd
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.common.proxy import Proxy, ProxyType
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
#service = Service('C:\Program Files\Chrome Driver\chromedriver.exe')
URL = "https://mor.nlm.nih.gov/RxClass/search?query=ALIMENTARY%20TRACT%20AND%20METABOLISM%7CATC1-4&searchBy=class&sourceIds=a&drugSources=atc1-4%7Catc%2Cepc%7Cdailymed%2Cmeshpa%7Cmesh%2Cdisease%7Cmedrt%2Cchem%7Cdailymed%2Cmoa%7Cdailymed%2Cpe%7Cdailymed%2Cpk%7Cmedrt%2Ctc%7Cfmtsme%2Cva%7Cva%2Cdispos%7Csnomedct%2Cstruct%7Csnomedct%2Cschedule%7Crxnorm"
driver = webdriver.Chrome('C:\Program Files\Chrome Driver\chromedriver.exe')
driver.get(URL)
category = driver.find_elements_by_class_name(By.XPATH, "//div[@class='service drug_class']//a")
print(category)
#WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, 'tr.dbsearch')))
#pd.read_html(driver.page_source)[1].iloc[:,:-1].to_csv('table.csv',index=False)
#time.sleep(8)
#driver.quit()
此外,我一直在尝试获取页面上显示为的内容:
class: ALIMENTARY TRACT AND METABOLISM / id: A / class type: ATC1-4 / show context
如何访问该文本?我尝试的所有内容都没有给出这样的元素或没有这样的类名作为错误。主要问题是我不确定如何在 javascript 中找到这些元素或类的名称,如果它不存在于 HTML 或 chrome 开发工具中的元素中?
我正在使用以下内容的错误消息是:
category = driver.find_elements_by_class_name(By.XPATH, "//div[@class='service drug_class']//a")
print(category)
TypeError: find_elements_by_class_name() takes 2 positional arguments but 3 were given
【问题讨论】:
-
您想获取哪些详细信息?另外,我在您的代码中看不到任何尝试获取这些详细信息或左侧带有硒的强文本...
-
在整个编辑过程中尝试多次更改。根据下面的答案,这使我进入了正确的区域,但仍然在尝试在页面的元素或类上找到此行时遇到问题。班级:消化道和新陈代谢 / id:A / 班级类型:ATC1-4 / 显示上下文
-
如果您仍然对答案有疑问,那么您不应该将其标记为答案。如果有一个接受的答案,那么大多数用户不会尝试改进它,并且这个问题/答案仅作为其他人的目的,以防他们遇到同样的问题....
-
第一部分的答案是正确的,这应该作为两个不同的问题提出。我的道歉。
-
你不必道歉,我只是在暗示你可能不会得到回应...... ???? (关于问题的附加部分)
标签: python selenium web-scraping css-selectors webdriverwait