2016-11-15 2 views
3

Я сканирую website, у которого есть несколько таблиц. В частности, я хотел бы извлечь из всех таблиц (если есть), первый столбец (presentation) и company name (который находится в этом XPath: .//*[@id='accordion']//h3), что-то вроде этого (а формат два измерения):Проблемы при попытке получить конкретные предметы и отформатировать их с помощью селена?

['Mission Pharmacal (Reverified 01/21/2015)' , '250 mg (NDC 01780-500-01)'] 
['Hospira, Inc. (Reverified 11/07/2016)', '5 mEq/mL; 20 mL vial (NDC 0409-6043-01)'] 
['Shire US Inc. (Reverified 07/01/2016)', 'AGRYLIN® (anagrelide hydrochloride) Dosage Form: 0.5 mg capsules for oral administration (NDC 54092-063-01)'] 
['Teva Pharmaceuticals (Reverified 11/01/2016)', '1mg 100 (NDC 00172-5240-60)'] 
['Teva Pharmaceuticals (Reverified 11/01/2016)', '0.5 mg 10 (NDC 00172-5241-60)'] 
['Jazz Pharmaceuticals, Inc. (Revised 11/14/2016)', 'ERWINAZE 10,000 IU lyophilized powder supplied in a clear 3 mL glass vial 5 vial carton (NDC 57902-249-05)'] 
[' Jazz Pharmaceuticals, Inc. (Revised 11/14/2016)', 'ERWINAZE 10,000 IU lyophilized powder supplied in a clear 3 mL glass vial 1 vial (NDC 57902-249-01)'] 

До сих пор я пробовал подход ниже. Тем не менее, я не понимаю, как настроить список, и я не понимаю, почему я не поймаю некоторые скрытые элементы, начиная с аккордеона.

В:

from selenium import webdriver 

driver = webdriver.PhantomJS() 
driver.get('http://www.accessdata.fda.gov/scripts/drugshortages/default.cfm') 
links = driver.find_elements_by_xpath('''.//*[@id='tabs-1']//tbody//td[1]//a[2]''') 
links = [x.get_attribute('href') for x in links] 

lis = list() 
for x in links:  
    driver.get(x)  
    #.//*[@id='accordion']//div//table 

    xpath_list = ['.//*[@id="accordion"]//div//tr//td[1]', ".//*[@id='accordion']//h3//a"] 
    full_content = [[x.text for x in driver.find_elements_by_xpath(xpath)] for xpath in xpath_list] 
    lis.append(full_content) 

lis 

Out:

[[['250 mg (NDC 01780-500-01)'], []], 
[['5 mEq/mL; 20 mL vial (NDC 0409-6043-01)'], []], 
[['AGRYLIN® (anagrelide hydrochloride) Dosage Form: 0.5 mg capsules for oral administration (NDC 54092-063-01)', 
    '', 
    ''], 
    ['Shire US Inc. (Reverified 07/01/2016)', 
    'Teva Pharmaceuticals (Reverified 11/01/2016)']], 
[['ERWINAZE 10,000 IU lyophilized powder supplied in a clear 3 mL glass vial 5 vial carton (NDC 57902-249-05)', 
    'ERWINAZE 10,000 IU lyophilized powder supplied in a clear 3 mL glass vial 1 vial (NDC 57902-249-01)'], 
    ['Jazz Pharmaceuticals, Inc. (Revised 11/14/2016)']], 
[['0.4 mg/mL, 1 mL single-dose vial, package of 25 (NDC 00517-0401-25)', 
    '1 mg/mL, 1 mL single-dose vial, package of 25 (NDC 00517-1010-25)', 
    '', 
    '', 
    '', 
    '', 
    '', 
    ''],...... 

ответ

1
import requests 
from lxml.html import fromstring 

r = requests.get('http://www.accessdata.fda.gov/scripts/drugshortages/dsp_ActiveIngredientDetails.cfm?AI=Atropine%20Sulfate%20Injection&st=c&tab=tabs-1') 
html = fromstring(r.text) 

в:

[i.text_content().strip() for i in html.xpath('//div[@id="accordion"]//h3')] 

из:

['American Regent/Luitpold (Reverified 11/10/2016)', 
'Amphastar Pharmaceuticals, Inc./IMS (Reverified 08/18/2016)', 
'Hospira, Inc. (Revised 11/07/2016)', 
'West-Ward Pharmaceuticals (Revised 05/02/2016)'] 

в:

[i.xpath('.//td[1]//text()') for i in html.xpath('//div[@id="accordion"]//tbody')] 

отъезда:

[['0.4 mg/mL, 1 mL single-dose vial, package of 25\r\n(NDC 00517-0401-25)', 
    '1 mg/mL, 1 mL single-dose vial, package of 25 (NDC 00517-1010-25)'], 
['0.1 mg/mL; 10 mL Luer-Jet Prefilled Syringe\r\n(NDC 76329-3339-1, Old NDC 0548-3339-00) \r\n'], 
['0.1 mg/mL; 10 mL Ansyr syringe\r\n(NDC 0409-1630-10)', 
    '0.05 mg/mL; 5 mL Ansyr syringe\r\n(NDC 0409-9630-05)', 
    '0.1 mg/mL; 5 mL Lifeshield syringe\r\n(NDC 0409-4910-34)', 
    '0.1 mg/mL; 10 mL Lifeshield syringe\r\n(NDC 0409-4911-34)'], 
['0.4 mg/mL, 20 mL vial (NDC 0641-6006-10)\r\n']] 

я Ues LXML XPath, я надеюсь, что это будет полезно. Кстати, понимание вложенного списка действительно трудно понять. Возможно, вы можете создавать списки отдельно, а не зашивать их до gangher.

+0

Спасибо за помощь !. Дело в том, что меня интересует итерация содержимого каждой ссылки на веб-сайте (а не на странице, которую вы указали). В частности, для получения первого столбца каждой таблицы и названия компании, расположенной в аккордеоне, а не получения указателя, который вы указали. – student

+0

Я обновил вопрос с более подробной информацией, спасибо за помощь! – student

 Смежные вопросы

  • Нет связанных вопросов^_^