eBay에서 검색 결과를 필터링하여 텍스트 파일로 내보내고 싶습니다. 검색에 많은 결과가 있지만 동일한 방법을 사용하여 모든 결과를 필터링할 수 있을 것이라고 생각했기 때문에 이 게시물 하단에 예제만 포함했습니다. 저는 sed와 grep을 사용하여 URL을 필터링하는 기본 사항을 어느 정도 이해하고 있지만 출력이 특정 방식으로 표시되기를 원합니다. URL 뒤에 쉼표와 가격을 입력하고 싶습니다. 예를 들어:
이 시점에서 제가 지적하고 싶은 한 가지는 텍스트 파일에 쓸모없는 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과 가격이 번갈아 나타나는 순서를 얻을 수 있기를 바랍니다. 그런 다음 연속된 줄을 연결하여 원하는 형식을 얻으세요.