1

python과 BeautifulSoup로 만든 크롤러에서 decompose() 함수를 작동시키는 데 문제가 있습니다.Python Crawler Beatifulsoup decompose() function

문제는 다음과 같습니다. 내가 사용하는 경우

soup = soup_function('http://www.processorstore.nl/product/476816/category-212194/intel-core-i7-4790k.html') 
dt = soup.findAll('dt', {'class': 'product-specs--item-title'}) 

for i in range(0, len(dt)): 

    dtRows = dt[i] 
    dtRowsStrip = dtRows.text.strip() 

    print(dtRows.text.strip()) 

    # print(dtRows) 

    # dtRowsSplit = "".join(dtRowsStrip.split()) 
    # print(dtRowsSplit) 

: 나는 (소스 코드에서 볼 수 있음) 웹 사이트의 제품의 모든 사양 데이터를 얻기 위해 노력하고 내가 출력으로 얻을

> print(dtRows.text.strip()) 

를이 :

Serie 
Threads 
Socket 
Kloksnelheid 
Fabrikantcode 
Artikelnummer 
Merk 
Garantie 
Garantietype 
Serie   


     Serie 
Socket   


     Socket 
Codenaam    


     Codenaam 
Threads   


     Threads 
Turbo Frequency   


     Turbo Frequency 
Multiplier unlocked   


     Multiplier unlocked 
Cache   


     Cache 
Geheugencontroller   


     Geheugencontroller 
etc .... 

첫 번째 완전한 행이 맞습니다. seccond 행에서 <a> 태그 (<dt> 태그 내) 때문에 이중 값을 얻습니다.

<dt class="product-specs--item-title"> 
    <a class="product-specs--help-icon js-tooltip" href="#spec_Serie" title="Zowel AMD als Intel produceren processoren in verschillende series. Een serie is bedoeld voor bepaald gebruik. Zo zijn Core i3 processoren geschikt voor internet &amp; office werkzaamheden en Core i7 processoren voor veeleisende multitasking en gaming. Binnen een serie zijn verschillende modellen processoren verkrijgbaar. Van welke serie is deze processor onderdeel?"><i class="icon icon-circle-questionmark"></i><span class="product-specs--help-title">Serie</span></a> 
    <span>Serie</span> 
</dt> 

누군가가 나에게 전체 <a> 태그를 삭제하는 데 도움이 수 :

한 예는 이것이다?

추가 정보 :

soup = soup_function('http://www.processorstore.nl/product/476816/category-212194/intel-core-i7-4790k.html') 

for spec in soup.select('dt.product-specs--item-title'): 
    print(spec.get_text(strip=True)) 

출력은 다음과 같다 :

Serie 
Threads 
Socket 
Kloksnelheid 
Fabrikantcode 
Artikelnummer 
Merk 
Garantie 
Garantietype 
SerieSerie 
SocketSocket 
CodenaamCodenaam 
ThreadsThreads 
Turbo FrequencyTurbo Frequency 
Multiplier unlockedMultiplier unlocked 
CacheCache 
GeheugencontrollerGeheugencontroller 
ProductieprocesProductieproces 
Stroomverbruik maximaalStroomverbruik maximaal 
KloksnelheidKloksnelheid 
ProcessorkernenProcessorkernen 
Type GPUType GPU 

당신이 볼 수 있듯이 나는 다음과 같은 코드를 사용하는 경우

#. 두 번째 <dl> 블록 이후에 이중 값을 얻습니다.

추가 : 감사합니다 ... 나는 또한 그것을 발견했습니다.난 당신의 코드가 더 알고 있지만 그냥 내 솔루션을 공유하기를 원해요 :

for spec in soup.select('div.product-specs dl.product-specs--list > dt.product-specs--item-title span.product-specs--help-title'): 
    print(spec.get_text(strip=True)) 

    parent = spec.find_parent('dt') 
    value = parent.find_next_sibling("dd", {'class': 'product-specs--item-spec'}) 
    print(value.text.strip()) 

답변

3
당신은 당신이 추출되는 노드 어디에 대해 더 구체적으로해야 할

:

from urllib2 import urlopen 
from bs4 import BeautifulSoup 

soup = BeautifulSoup(urlopen('http://www.processorstore.nl/product/476816/category-212194/intel-core-i7-4790k.html')) 

for spec in soup.select('div.product-specs > dl.product-specs--list > dt.product-specs--item-title'): 
    print spec.get_text(strip=True) 

인쇄 :

Serie 
Threads 
Socket 
Kloksnelheid 

여기에서 우리는 기본적으로 다음 블록을 얻습니다.

enter image description here 당신이 제품의 사양을 모두 얻을 중복을 피하기 위해 필요한 경우


, 당신은 class="product-specs--help-title"span에 한 단계 아래로 이동해야합니다

for spec in soup.select('div.product-specs dl.product-specs--list > dt.product-specs--item-title span.product-specs--help-title'): 
    print spec.get_text(strip=True) 

인쇄 :

Serie 
Socket 
Codenaam 
Threads 
Turbo Frequency 
Multiplier unlocked 
Cache 
Geheugencontroller 
Productieproces 
Stroomverbruik maximaal 
Kloksnelheid 
Processorkernen 
Type GPU 
Koeler meegeleverd 

다음은 이름을 얻는 방법입니다. 값 쌍의 값 :

01 23,516,
from urllib2 import urlopen 
from bs4 import BeautifulSoup 

soup = BeautifulSoup(urlopen('http://www.processorstore.nl/product/476816/category-212194/intel-core-i7-4790k.html')) 

for spec in soup.select('div.product-specs dl.product-specs--list > dt.product-specs--item-title'): 
    name = spec.span 
    if not name: 
     continue 

    value = spec.find_next_sibling('dd', class_='product-specs--item-spec') 
    print name.get_text(strip=True), value.get_text(strip=True) 

인쇄 :

Serie Core i7 
Socket 1150 
Codenaam Haswell Refresh 
Threads 8 
Turbo Frequency 4400 MHz 
Multiplier unlocked Ja 
Cache 8 MB 
Geheugencontroller DDR3-1600 
Productieproces 22 nm 
Stroomverbruik maximaal 88 watt 
Kloksnelheid 4000 MHz 
Processorkernen Quad-core 
Type GPU Intel HD Graphics 4600 
Koeler meegeleverd Ja 
+0

첫 번째 행은 문제가이 arent. 두 번째 FrEaKi

+0

여전히 값을 얻습니다. 더블. 포스트에 추가 코드를 추가하겠습니다. – FrEaKi

+0

이제 다른 문제가 있습니다. :(전에 dd = dt.find_next_sibling ("dd", { '클래스': '제품 - 사양 - 항목 - 사양'}) 지금 나는 그것으로 프로퍼티 값을 얻을 수 없습니다. = Core i7 ... 마지막으로 한 번 도와주세요. – FrEaKi