David Choi
David Choi

Reputation: 21

How to extract 'alt' value of HTML documents with python?

I'm learning basic function of Beautifulsoup. I'm wondering which part of code below could be fix to extract number of alt(means numbering of rank list, like 1, 2, 3) on movie rank page. I wrote sample below

import requests
from bs4 import BeautifulSoup
    
headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
    
data = requests.get('https://movie.naver.com/movie/sdb/rank/rmovie.nhn?sel=pnt&date=20200303')
    
soup = BeautifulSoup(data.text, 'html.parser')
    
movies = soup.select('#old_content > table > tbody > tr')
    print(len(movies))   
    
    for movie in movies:
        d_tag = movie.select_one('td.ac > alt')
        if d_tag is not None:
            print (d_tag)

I tried few ways to discover out the answer on line starting with 'd_tag = '

movie.select.one('td.ac > alt') (this work but not only 'number' I need.)

movie.select.one('td.ac > img alt')

movie.select.one('td.ac > img > alt')

movie.select.one('td.ac > img.alt')

this is first time to ask a question on this great community, please excuse if my question is awkward.

Upvotes: 2

Views: 221

Answers (2)

Sushil
Sushil

Reputation: 5531

Try this:

import requests
from bs4 import BeautifulSoup

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}

data = requests.get('https://movie.naver.com/movie/sdb/rank/rmovie.nhn?sel=pnt&date=20200303')

soup = BeautifulSoup(data.text, 'html.parser')

movies = soup.select('#old_content > table > tbody > tr')

final = {}

for movie in movies:
    try:
        final.setdefault('Ranking',[]).append(movie.select_one('td.ac > img')['alt'])
    except:
        pass

    try:
        final.setdefault('Title',[]).append(movie.select_one('td.title > div > a').text)
    except:
        pass

    try:
        final.setdefault('Rating',[]).append(movie.select_one('td.point').text)
    except:
        pass

for pair in zip(final['Ranking'],final['Title'],final['Rating']):
    print(" , ".join(pair))

Output:

01 , 그린 북 , 9.60
02 , 가버나움 , 9.59
03 , 베일리 어게인 , 9.52
04 , 주전장 , 9.52
05 , 포드 V 페라리 , 9.51
06 , 아일라 , 9.49
07 , 원더 , 9.49
08 , 당갈 , 9.47
09 , 쇼생크 탈출 , 9.44
010 , 터미네이터 2:오리지널 , 9.43
11 , 보헤미안 랩소디 , 9.42
12 , 덕구 , 9.41
13 , 나 홀로 집에 , 9.41
14 , 월-E , 9.41
15 , 살인의 추억 , 9.40
16 , 빽 투 더 퓨쳐 , 9.40
17 , 인생은 아름다워 , 9.39
18 , 매트릭스 , 9.39
19 , 라이언 일병 구하기 , 9.39
20 , 사운드 오브 뮤직 , 9.39
21 , 헬프 , 9.39
22 , 포레스트 검프 , 9.39
23 , 안녕 베일리 , 9.39
24 , 글래디에이터 , 9.39
25 , 위대한 쇼맨 , 9.38
26 , 센과 치히로의 행방불명 , 9.38
27 , 토이 스토리 3 , 9.38
28 , 어벤져스: 엔드게임 , 9.38
29 , 클래식 , 9.38
30 , 알라딘 , 9.38
31 , 헌터 킬러 , 9.37
32 , 죽은 시인의 사회 , 9.37
33 , 아이 캔 스피크 , 9.37
34 , 레옹 , 9.37
35 , 동주 , 9.37
36 , 반지의 제왕: 왕의 귀환 , 9.37
37 , 타이타닉 , 9.36
38 , 캐스트 어웨이 , 9.36
39 , 여인의 향기 , 9.36
40 , 집으로... , 9.36
41 , 굿바이 마이 프랜드 , 9.35
42 , 서유기 2 - 선리기연 , 9.35
43 , 주토피아 , 9.35
44 , 두 교황 , 9.35
45 , 굿 윌 헌팅 , 9.35
46 , 클레멘타인 , 9.35
47 , 히든 피겨스 , 9.35
48 , 세 얼간이 , 9.35
49 , 쉰들러 리스트 , 9.34
50 , 울지마 톤즈 , 9.34

Upvotes: 1

Andrej Kesely
Andrej Kesely

Reputation: 195573

To get all movie titles + rankings, you can use this example:

import requests 
from bs4 import BeautifulSoup


url = 'https://movie.naver.com/movie/sdb/rank/rmovie.nhn?sel=pnt&date=20200303'
soup = BeautifulSoup( requests.get(url).content, 'html.parser' )

for row in soup.select('.list_ranking > tbody > tr:has(a)'):
    movie_title = row.a.text
    ranking = row.select_one('.point').text
    print(movie_title, ranking)

Prints:

그린 북 9.60
가버나움 9.59
베일리 어게인 9.52
주전장 9.52
포드 V 페라리 9.51
아일라 9.49
원더 9.49
당갈 9.47
쇼생크 탈출 9.44
터미네이터 2:오리지널 9.43
보헤미안 랩소디 9.42
덕구 9.41
나 홀로 집에 9.41
월-E 9.41
살인의 추억 9.40
빽 투 더 퓨쳐 9.40
인생은 아름다워 9.39
매트릭스 9.39
라이언 일병 구하기 9.39
사운드 오브 뮤직 9.39
헬프 9.39
포레스트 검프 9.39
안녕 베일리 9.39
글래디에이터 9.39
위대한 쇼맨 9.38
센과 치히로의 행방불명 9.38
토이 스토리 3 9.38
어벤져스: 엔드게임 9.38
클래식 9.38
알라딘 9.38
헌터 킬러 9.37
죽은 시인의 사회 9.37
아이 캔 스피크 9.37
레옹 9.37
동주 9.37
반지의 제왕: 왕의 귀환 9.37
타이타닉 9.36
캐스트 어웨이 9.36
여인의 향기 9.36
집으로... 9.36
굿바이 마이 프랜드 9.35
서유기 2 - 선리기연 9.35
주토피아 9.35
두 교황 9.35
굿 윌 헌팅 9.35
클레멘타인 9.35
히든 피겨스 9.35
세 얼간이 9.35
쉰들러 리스트 9.34
울지마 톤즈 9.34

Upvotes: 1

Related Questions