डिजी-की से स्वचालित रूप से भाग की जानकारी कैसे प्राप्त करें


15

डिजी-कुंजी भाग संख्या, निर्माता, निर्माता भाग संख्या, विवरण, इत्यादि जैसी जानकारी को स्वचालित रूप से पुनः प्राप्त करने के लिए कैसे करें, शायद GET http का जवाब दे रहा है:

http://search.digikey.com/scripts/DkSearch/dksus.dll?Detail&name=DK_PART_NUMBER

(सही मापदंडों के लिए गुस्सा करने के लिए धन्यवाद)

जहां DK_PART_NUMBER डिजिके पार्ट नंबर है।

क्या किसी को पता है कि क्या उनके पास एक वेब सेवा है या बस इसके लिए एक बेहतर इंटरफ़ेस है?


इस सवाल को पूछने के बाद मैंने आगे बढ़ने का फैसला किया और डिगिकी से कुछ बुनियादी लाने के लिए कुछ लिखा:

dk_pn = '587-1962-1-ND'

from urllib import urlopen
from sgmllib import SGMLParser

headers = ['Digi-Key Part Number',
           'Manufacturer',
           'Manufacturer Part Number',
           'Description',
           'Lead Free Status / RoHS Status',
           'Operating Temperature',
           'Standard Package',
           'Price Break',
           'Unit Price',
           'Extended Price']

class DK_Parser(SGMLParser):
    def reset(self):

        SGMLParser.reset(self)

        self.last_td = ''
        self.inside_th = False
        self.inside_td = False
        self.grab_data = False
        self.part_info = {}
        self.hdr_index = 0
        self.row_hdrs = []

    def start_tr(self, attrs): # row
        self.first_header_in_row = True

    def start_th(self, attrs): # header cell
        if self.first_header_in_row:
            self.first_header_in_row = False
            self.row_hdrs = []
            self.hdr_index = 0
        self.inside_th = True

    def end_th(self):
        self.inside_th = False

    def start_td(self, attrs): # data cell
        self.inside_td = True

    def end_td(self): 
        self.inside_td = False
        self.hdr_index = self.hdr_index+1

    def handle_data(self,text):
        text = text.strip()
        if self.inside_th:
            if text in headers:
                self.row_hdrs.append(text)
                self.last_td = ''
                self.grab_data = True
            else:
                self.grab_data = False
        elif self.inside_td and self.grab_data:
            if self.hdr_index:
                self.last_td = ''
            if self.hdr_index < len(self.row_hdrs):
                self.last_td = self.last_td + text
                self.part_info[self.row_hdrs[self.hdr_index]] = self.last_td

dk_url = 'http://search.digikey.com/scripts/DkSearch/dksus.dll'
dk_params = '?Detail&name='

sock = urlopen(dk_url + dk_params + dk_pn)

parser = DK_Parser()
parser.feed(sock.read())
sock.close()
parser.close()

for k,v in parser.part_info.items():
    print k,":",v

[मूल्य विराम / इकाई मूल्य / विस्तारित मूल्य] तालिका की केवल पहली डेटा लाइन पर कब्जा कर लिया गया है।


4
डिजीके के पास अब खोज और ऑर्डर करने के लिए वेब सेवाएं हैं, और इसके लिए कुछ नमूना कोड हैं: services.digikey.com
apalopohapa

3
BeautifulSoup शायद अजगर के लिए सबसे अच्छा HTML पार्सर है। यह बहुत अच्छा है तो निर्मित सामान है।
कॉनर वुल्फ

जवाबों:


8

आप खोजशब्द के बजाय विस्तार विकल्प का उपयोग करना चाहते हैं। ऐशे ही:

http://search.digikey.com/scripts/DkSearch/dksus.dll?Detail&name=458-1003-ND

यह एक HTML पृष्ठ देता है जो पाठ है जिसे पार्स किया जा सकता है। यह सभी तालिका प्रारूप में है ताकि आप उन शर्तों की एक सूची बना सकें, जिनमें आप रुचि रखते हैं और मूल्यों को पार्स करते हैं। मैं एक पुर्जे सूची स्क्रिप्ट देख सकता हूं जो कि भागों की एक सूची और उन मूल्यों को लेती है जिन्हें आप पुनः प्राप्त करना चाहते हैं (यानी, वोल्ट, मैक्स करंट, या फिर डिजिके इसे सूचीबद्ध करता है) और फिर भाग संख्या पढ़ने के लिए कुछ पायथन बनाते हैं, पृष्ठ को पकड़ो, जानकारी को पार्स करें और इसे CSV, डेटाबेस या HTML फ़ाइल में चिपका दें। मैं भी कुछ ऐसा ही सोच रहा हूं और यह बहुत कठिन नहीं लगता। ठीक है, बहुत मुश्किल से मुझे इसे अभी भी वैसे भी बंद करने से रोकने के लिए :)


7

शायद आप इसे ऑक्टोपार्ट के एपीआई के माध्यम से कर सकते हैं ?


1
उनके प्रलेखन पृष्ठ से ऐसा लगता है कि आप आपूर्तिकर्ता (DigiKey, इस मामले में) पर फ़िल्टर कर सकते हैं, हालाँकि मैंने बस DigiKey की वेबसाइट पर कुछ हिस्सों की खोज की और ऑक्टोपार्ट ने परिणामों में DigiKey का उल्लेख नहीं किया।
फ्लायगुई

1
जाहिर तौर पर दिग्गी ने विशेष रूप से उन्हें अपनी खोज में शामिल नहीं करने के लिए कहा है।
अपलोफो

1
तब से बदल गया है, Digikey परिणामों में शामिल है। जाहिर है, इस साल भी, ऑक्टोपार्ट ने Digi-key से खोज परिणाम नहीं दिखाए। ऐसा लगता है कि उन्होंने डिजी-की के साथ कुछ काम किया है और अब ऑक्टोपार्ट डिजी-की से परिणाम प्रदर्शित करता है
कोरटुक

1
मैं अपनी खुद की पायथन लिपि को सीधे डाइजेकी के खिलाफ चला रहा हूं और ऑक्टोपार्ट एपीआई की क्वेरी कर रहा हूं और मुझे अलग परिणाम मिल रहे हैं। इसके अलावा, digikey के खिलाफ सीधे कोडिंग मैं एक ही हिस्से के लिए वैकल्पिक पैकेजिंग लिंक का पालन कर सकता हूं, मुझे नहीं लगता कि ऑक्टोपार्ट इसे ठीक से मैप करता है।
कीर्ति

4

मौजूदा सबसे अच्छा जवाब है https://services.digikey.com/ ' दिगी-की सर्च सर्च सर्विस (एसडब्ल्यूएस) और ऑर्डरिंग वेब सर्विस (ओडब्ल्यूएस) के रूप में है, जो ग्राहकों को डिजी-की के विशाल उत्पाद डेटाबेस तक वास्तविक पहुंच प्रदान करने और ऑर्डर देने के साथ प्रदान करते हैं। प्रणाली। '।

आप जो कर रहे हैं वह "स्क्रीन स्क्रेचिंग" है, जो ब्रेकिंग के लिए असुरक्षित है क्योंकि डिजीके उनकी वेबसाइट को अपडेट करता है।


1
हाँ। यह 2010 में पूछा गया था जब वे सेवाएं अभी तक मौजूद नहीं थीं। "स्क्रीन स्क्रैपिंग" तब सबसे अच्छा समाधान था। बेशक, किसी भी तकनीक को तोड़ने के लिए कमजोर है जब सिस्टम / इंटरफेस / एपीआई अपडेट हो जाते हैं।
अपालोफापा

2

ऑक्टोपार्ट के एपीआई के साथ ऐसा करने के लिए यहां अजगर, माणिक और जेएस में नमूना कोड है

http://octopart.com/api/docs/v3/overview#bom-matching

आप आवेदन स्तर पर Digikey के लिए फ़िल्टर कर सकते हैं।


2

यदि आप अपने BOM को MS Excel स्प्रेडशीट के रूप में रखते हैं, तो आप डेटा-> बाहरी डेटा-> वेब के माध्यम से सीधे वर्कशीट में कीमतों को खींच सकते हैं। मैं Excel 2010 का उपयोग कर रहा हूं। यहां मैक्रो रिकॉर्डर का उपयोग करके बनाया गया एक मैक्रो है।

Sub addDigikeyPriceExample()
    'http://www.digikey.com/product-detail/en/MANUFACTURERPARTNUM/DIGIKEYPARTNUM/PACKAGINGNUM ?
    With ActiveSheet.QueryTables.Add(Connection:= _
        "URL;http://www.digikey.com/product-detail/en/SI4707-B20-GM/336-2147-ND/2686997" _
        , Destination:=Range("$A$1"))
        .Name = "2622997" 'make random number?
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .WebSelectionType = xlSpecifiedTables
        .WebFormatting = xlWebFormattingNone
        .WebTables = """pricing"""
        .WebPreFormattedTextToColumns = True
        .WebConsecutiveDelimitersAsOne = True
        .WebSingleBlockTextImport = False
        .WebDisableDateRecognition = False
        .WebDisableRedirections = False
        .Refresh BackgroundQuery:=False
    End With
End Sub
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.