Digi-Key에서 부품 정보를 자동으로 검색하는 방법


15

Digi-Key 부품 번호, 제조업체, 제조업체 부품 번호, 설명 등과 같은 정보를 자동으로 검색하는 방법. GET http 구문 분석은 다음과 같습니다.

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

(올바른 매개 변수에 대해 화난 사람에게 감사합니다)

여기서 DK_PART_NUMBER는 Digikey 부품 번호입니다.

웹 서비스가 있는지 또는 더 나은 인터페이스가 있는지 아는 사람이 있습니까?


이 질문을 한 후에 Digikey에서 기본 가져 오기를 수행 한 것을 작성하기로 결정했습니다.

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
Digikey는 이제 검색 및 주문을위한 웹 서비스를 제공하며 이에 대한 샘플 코드를 가지고 있습니다. services.digikey.com
apalopohapa

3
BeautifulSoup 은 아마도 파이썬을위한 최고의 HTML 파서 일 것입니다. 내장 된 것보다 훨씬 좋습니다.
코너 울프

답변:


8

키워드 대신 detail 옵션을 사용하려고합니다. 이처럼 :

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

구문 분석 할 수있는 텍스트 인 HTML 페이지를 반환합니다. 모두 표 형식으로되어 있으므로 관심있는 용어 목록을 작성하고 값을 구문 분석 할 수 있습니다. 부품 목록과 검색하려는 값 (예 : 전압, 최대 전류 또는 Digikey가 나열)을 취하는 부품 목록 스크립트를 볼 수 있으며 부품 번호를 읽고 Python을 작성하여 페이지를 가져옵니다. 정보를 파싱하여 CSV, 데이터베이스 또는 HTML 파일로 고정하십시오. 나는 비슷한 것을 생각하고 너무 어렵지 않은 것 같습니다. 글쎄, 어쨌든 지금 당장 그것을 꺼내지 않을 정도로 열심히 :)


7

아마도 Octopart의 API를 통해 할 수 있습니까?


1
DigiKey 웹 사이트에서 소수의 부품을 검색했지만 Octopart는 결과에서 DigiKey를 언급하지 않았지만 해당 문서 페이지 에서 공급자 (이 경우 DigiKey)를 필터링 할 수있는 것처럼 보입니다.
Flyguy

1
분명히 Digikey는 그들에게 그들의 검색에 참여하지 말라고 구체적으로 요청했습니다.
apalopohapa

1
그 이후로 Digikey가 결과에 포함되었으며, 이전에도 Octopart는 Digi-key의 검색 결과를 보여주지 않았습니다. Digi-Key와 관련하여 문제가 해결 된 것으로 보이며 이제 Octopart는 Digi-Key의 결과를 표시합니다.
Kortuk

1
Digikey에 대해 직접 파이썬 스크립트를 실행하고 Octopart API를 쿼리하고 다른 결과가 나타납니다. 또한 digikey에 대해 직접 코딩하면 동일한 부품에 대한 대체 패키징 링크를 따를 수 있습니다. Octopart가 이것을 올바르게 매핑한다고 생각하지 않습니다.
kert

4

현재 최고의 답변은 https://services.digikey.com/입니다 . ' Digi-Key Search Web Service (SWS) 및 Ordering Web Service (OWS)는 고객에게 Digi-Key의 방대한 제품 데이터베이스 및 주문에 대한 실시간 액세스를 제공합니다. 체계. '.

당신이하고있는 일은 "화면 스크래핑"입니다. DigiKey는 웹 사이트를 업데이트함에 따라 침입에 취약합니다.


1
예. 이러한 서비스가 아직 존재하지 않는 2010 년에 요청되었습니다. "스크린 스크래핑"은 당시 최고의 솔루션이었습니다. 물론, 모든 기술은 시스템 / 인터페이스 / API가 업데이트 될 때 침입에 취약합니다.
apalopohapa


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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.