2016-06-07 2 views
2

그래서 나는 IMDB 페이지 http://www.imdb.com/genre/?ref_=nv_ch_gr_3BeautifulSoup로 인덱스

의 장르와 하위 장르에 대한 링크를 구문 분석하려고 이제 다음 코드

table = soup.find_all("table", {"class": "genre-table"}) 

for item in table: 
    for x in range(100): 

     try: 
      print(item.contents[x].find_all("h3")) 
      print(len(item.contents[x].find_all("h3"))) 
     except: 
      pass 
와 함께 사용할 수있는 뭔가 에 주요 장르 태그를 구문 분석 할 수 있었다

내 출력은 내가 t 때문에 이것을 이해이

[<h3><a href="http://www.imdb.com/genre/action/?ref_=gnr_mn_ac_mp">Action <span class="normal">»</span></a></h3>, <h3><a href="http://www.imdb.com/genre/adventure/?ref_=gnr_mn_ad_mp">Adventure <span class="normal">»</span></a></h3>] 
2 

처럼 두 개의 태그 목록의 11 개 세트입니다 그는 각 컨테이너에 두 개의 h3 태그가있는 "짝수"와 "홀수"의 클래스를 가지고 있지만 실제로는 짝수와 홀수를 구별하기 위해 지정하지 않았습니다. 실제로 여기에 내 자신의 질문에 대답하고 있다고 생각합니다. 그것은 컨테이너 클래스에 이상하거나 심지어 있었기 때문에 bs4가 그것을 구분하기 위해 그것을 보여주기 위해리스트에 넣었습니다.

두 번째로 더 중요한 질문 : 나는 내가 범위에서 y를 위해

을 시도했습니다

df = pd.DataFrame(columns= ['Genre', 'Sub-Genre', 'Link']) 

로 설정 한 내 dataframe에 각 H3 링크와 제목을 얻을 것입니다 방법

(2) :

df.append({'Genre':'item.contents[x].find_all("h3"))[y].text)},  ignore_index = true) 

이것은 for 루프에 중첩되어 있으며 x는 물론)
그러나 그것은 작동하지 않습니다 어떤 생각? 갈마 당신의 길!

답변

2

먼저 첫 번째 사람이이 켜지지이기 때문에 모든 테이블을 찾을 필요가 없습니다 떨어져 :

table = soup.find("table", {'class': 'genre-table'}) 

및 다른 모든 항목이 중복 때문에 (첫 번째로 시작)이 같은 테이블을 반복 할 수는 :

for item in list(table)[1::2]: 

이 후 우리는 그들 모두를 통해 모든 행 및 루프의 'H3'태그를 얻을 수 있습니다 :

row = item.find_all("h3") 

    for col in row: 
모든 'H3'요소의 텍스트가이 형식의 장르 반환하기 때문에 0

: 그냥에서 요소를 추가,이 후

 col.span.extract() 
     link = col.a['href'] 
     genre = col.text.strip() 

: 'Somegenre \ XC2 xbb \'를 나는 텍스트를 얻기 전에 스팬 요소를 제거 인덱스에 의한 dataframe에 :

import pandas as pd 
import requests 
from bs4 import BeautifulSoup 

df = pd.DataFrame(columns=['Genre', 'Sub-Genre', 'Link']) 

req = requests.get('http://www.imdb.com/genre/?ref_=nv_ch_gr_3') 
soup = BeautifulSoup(req.content, 'html.parser') 

table = soup.find("table", {'class': 'genre-table'}) 

for item in list(table)[1::2]: 
    row = item.find_all("h3") 

    for col in row: 
     col.span.extract() 
     link = col.a['href'] 
     genre = col.text.strip() 

     df.loc[len(df)] = [genre, None, link] 
+0

사람이 완벽 오른쪽 밖으로 저를 분류 할 때를 가서하지만 하나 개의 질문, 하하 이러한 기능 중 일부에 공부를 할 수있어 :

전체 코드가

 df.loc[len(df)]=[genre, None, link] 

일곱 번째로 썰기 어떻게 그것을 반복하고 있습니까? 약간 두 콜론에 의해 던져진 임 – entercaspa

+0

편집 그냥 네가 목록 (테이블) [요소 -가 - 여기] – entercaspa

+0

@entercaspa 4 원소로 4 위치에 슬라이스 이해가 안 돼요 당신이 무슨 뜻인지 모르겠지만 목록 (table)은 테이블 요소의 목록을 반환하여 슬라이스 할 수 있습니다. 구문은 [시작 : 끝] 또는 [시작 : 끝 : 단계]와 같이 작동합니다.기본값은 0이고 기본값은 len (list)입니다. 따라서 [시작 :], [: 끝] 또는 [:]과 같이 둘 수 있습니다. 마지막 옵션 단계는 요소들과 여기 [1 : (end) : 2]를 건너 뛸 수있게합니다. 우리는 매 두 번째 요소를 건너 뜁니다. 구문 [:: 3]은 3 분마다 건너 뛴다. –