Parça bilgilerini otomatik olarak Digi-Key'den alma


15

Digi-Key parça numarası, Üretici, Üretici Parça Numarası, Açıklama, vb. Gibi bilgileri otomatik olarak nasıl alabilirim?

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

(doğru parametreler için angryee sayesinde)

DK_PART_NUMBER, Digikey parça numarasıdır.

Herkes bir web hizmeti ya da sadece bunun için daha iyi bir arayüz olup olmadığını biliyor mu?


Bu soruyu sorduktan sonra Digikey'den bazı temel getirmeler yapan bir şeyler yazmaya karar verdim:

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

[Fiyat sonu / birim fiyat / uzatılmış fiyat] tablosunun yalnızca ilk veri satırı yakalanır.


4
Digikey artık arama ve sipariş için web servislerine sahip ve bunun için bazı örnek kodlara sahip: services.digikey.com
apalopohapa

3
BeautifulSoup muhtemelen python için en iyi HTML ayrıştırıcısıdır. Dahili şeyler çok daha güzel.
Connor Wolf

Yanıtlar:


8

Anahtar kelime yerine ayrıntı seçeneğini kullanmak istersiniz. Bunun gibi:

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

Bu, ayrıştırılabilecek metin olan bir HTML sayfası döndürür. Hepsi tablo biçimindedir, böylece ilgilendiğiniz terimlerin bir listesini oluşturabilir ve değerleri ayrıştırabilirsiniz. Bir parça listesi komut dosyası ve almak istediğiniz değerleri (yani, Gerilim, Maks Akım veya Digikey listeler) alır ve daha sonra parça numarasını okumak, sayfa kapmak için bazı Python yapmak bir parça listesi komut dosyası görebilirsiniz bilgileri ayrıştırın ve bir CSV, veritabanı veya HTML dosyasına yapıştırın. Benzer bir şey düşünüyordum ve çok zor görünmüyor. Neyse, şu anda onu kırbaçlamama engel olacak kadar zor :)


7

Belki bunu Octopart'ın API'sı üzerinden yapabilirsiniz ?


1
Onların itibaren dokümantasyon sayfasından , bu sadece Digi-Key internet sitesinde parçaların bir avuç aramış ve Octopart sonuçlarında Digi-Key söz etmedi olsa da, (bu durumda, Digi-Key) tedarikçisi göre filtreleme yapabilir gibi görünüyor.
Flyguy

1
Görünüşe göre Digikey özellikle aramalarına dahil etmemelerini istedi.
apalopohapa

1
O zamandan beri değişti, Digikey sonuçlara dahil edildi.Öncelikle, bu yıl bile, Octopart Digi-key'dan arama sonuçlarını göstermedi. Görünüşe göre Digi-Key ile bir şeyler yaptılar ve şimdi Octopart Digi-key'den sonuçları gösteriyor
Kortuk

1
Doğrudan Digikey karşı kendi python komut dosyası çalıştırıyorum ve Octopart API sorgulama ve farklı sonuçlar alıyorum. Ayrıca, doğrudan digikey karşı kodlama ben aynı bölüm için alternatif ambalaj bağlantıları takip edebilirsiniz, ben Octopart bu düzgün haritalar sanmıyorum.
kert

4

Şu anki en iyi yanıt https://services.digikey.com/ ' Digi-Key Arama Web Hizmeti (SWS) ve Sipariş Web Hizmeti (OWS) Digi-Key'in engin ürün veritabanı ve sipariş için gerçek zamanlı erişim sunmak sistemi. '.

Yaptığınız şey, DigiKey web sitelerini güncellediğinde kırılmaya açık olan "ekran kazıma".


1
Evet. Bu, 2010 yılında bu hizmetlerin henüz mevcut olmadığı sorulmuştur. "ekran kazıma" o zamanlar en iyi çözümdü. Elbette , sistemler / arayüzler / API'ler güncellendiğinde herhangi bir teknik kırılmaya karşı savunmasızdır.
apalopohapa


2

Ürün ağacınızı bir MS Excel elektronik tablosu olarak tutarsanız, fiyatları Veri-> Dış Veri Al -> Web'den doğrudan bir çalışma sayfasına çekebilirsiniz. Excel 2010 kullanıyorum. İşte makro kaydedici kullanarak yaptığım bir makro.

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.