Ebay HTML 페이지에서 일부 정보를 추출하는 Bash 스크립트

Ebay HTML 페이지에서 일부 정보를 추출하는 Bash 스크립트

eBay에서 검색 결과를 필터링하여 텍스트 파일로 내보내고 싶습니다. 검색에 많은 결과가 있지만 동일한 방법을 사용하여 모든 결과를 필터링할 수 있을 것이라고 생각했기 때문에 이 게시물 하단에 예제만 포함했습니다. 저는 sed와 grep을 사용하여 URL을 필터링하는 기본 사항을 어느 정도 이해하고 있지만 출력이 특정 방식으로 표시되기를 원합니다. URL 뒤에 쉼표와 가격을 입력하고 싶습니다. 예를 들어:

http://www.ebay.co.uk/itm/Principles-Of-Modern-Chemistry-International-Edition-Gillis-H-Pat-Oxtoby-Ca-/161952820281?hash=item25b523ec39:g:MEYAAOSwoydWnvT2, £73.69

이 시점에서 제가 지적하고 싶은 한 가지는 텍스트 파일에 쓸모없는 URL이 있다는 것입니다(예:http://thumbs.ebaystatic.com/images/g/MEYAAOSwoydWnvT2/s-l225.jpg) 그러나 내가 관심 있는 유형(예: 첫 번째 예에서 사용한 형식)과 다른 형식입니다. 내가 이것을 어떻게 달성할 수 있는지 아는 사람이 있나요? 감사해요

<h3 class="lvtitle"><a href="http://www.ebay.co.uk/itm/Principles-Of-Modern-Chemistry-International-Edition-Gillis-H-Pat-Oxtoby-Ca-/161952820281?hash=item25b523ec39:g:MEYAAOSwoydWnvT2"  class="vip" title="Click this link to access Principles Of Modern Chemistry, International Edition Gillis, H. Pat; Oxtoby; Ca">Principles Of Modern Chemistry, International Edition Gillis, H. Pat; Oxtoby; Ca</a>^M
                </h3>^M
        <ul class="lvprices left space-zero">^M
^M
        <li class="lvprice prc">^M
                        <span  class="bold bidsold">
                                        £73.69</span>
                                </li>^M
                <li class="lvformat">^M
                        <span >
                                <span class="logoBin" title="Buy it now"></span>
                                        </span>

답변1

eBay에서 데이터를 얻는 가장 좋은 방법은 eBay를 이용하는 것입니다.응용 프로그래밍 인터페이스. 즉, 때로는 HTML만 가지고 있는 경우도 있으므로 이에 대해서는 답변에서 다루겠습니다.

HTML에서 정보를 추출하기 위해 sed 및 grep과 같은 도구를 사용하려고 시도하지 마십시오. 완벽하게 기능하고 깨지기 쉬운 경우에는 수행하기가 매우 어렵습니다.이 길은 광기로 가득 차 있어.

HTML을 구문 분석해야 하는 경우 Python과 같은 HTML을 구문 분석하는 도구를 사용하세요.아름다운 수프라이브러리, 펄HTML::트리빌더, 루비노코기리, 등.

#!/usr/bin/env python2
import codecs, sys, BeautifulSoup
html = BeautifulSoup.BeautifulSoup(codecs.open(sys.argv[1], "r", "utf-8").read())
for lv in html.findAll("h3", "lvtitle"):
    url = lv.find("a")["href"]
    bid = lv.findNextSibling("ul").find("span", "bidsold").text.strip()
    print(url, bid)

답변2

빠르고 더러운 해결책은 다음과 같습니다.

sed -n 's/^.*href="\([^"]*\)".*$/\1/p; s/^.*\(£[0-9.]*\).*$/\1/p' |
awk 'NR % 2{ printf "%s, ", $0; next} {print}' 

이는 href처럼 보이는 것과 가격으로 보이는 것을 추출하고, URL과 가격이 번갈아 나타나는 순서를 얻을 수 있기를 바랍니다. 그런 다음 연속된 줄을 연결하여 원하는 형식을 얻으세요.

관련 정보