看板 Python 關於我們 聯絡資訊
各位前輩好,小弟 剛開始接觸Python,最近剛學到BeautifulSoup做爬蟲 於是就想要試著實做看看,但是看了老半天還是不是很了解 soup.get_text、soup.content等差別 還有bs4.element.Tag到底有那些指令是可以用的 目前小弟用yahoo的電影排行做練習,程式碼如下: ----- url='https://movies.yahoo.com.tw/chart.html' TAG='div' TAGClass='tr' geturl = requests.get(url) soup = BeautifulSoup(geturl.text, 'lxml') articles=soup(TAG, TAGClass) for article in articles: Rank=article.find('div','td').contents Title=article.find('div','rank_txt') print(Rank,Title) print(type(article),type(Rank),type(Title)) ---- 本來是想做出列出排名、電影名稱等資訊 但不知為何Title這邊不能用.contents來抓出裡面的電影名稱(但是Rank卻可以) 也不能用get_Text(說不支援) 網頁查了老半天還是找不到方法@@ 因此來此請較各位前輩,看小弟到底是哪些觀念有問題 (另外想確認一下,一般是在尋找資料時 是會從要抓的資料上一層的Tag跟tag class來往下用for迴圈這樣尋找嗎? 還是其實有比較簡單的做法呢?) 先謝謝各位前輩了 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.136.13.206 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1520999764.A.395.html
froce: find_all()應該會是你要的 03/14 16:02
bluefantasia: 感謝f大,但是我目前用上面程式碼跑的結果是如下: 03/14 16:13
bluefantasia: ['2'] <div class="rank_txt">紅雀</div> 03/14 16:13
bluefantasia: 前面的[2]用content提出來,但是後面名字卻提不出來 03/14 16:14
bluefantasia: find_all我看到可用加關鍵字,但是片名似乎無法? 03/14 16:15
froce: 因為你的Title第1個會是None(bs4沒找到),當然不會有cont 03/14 16:33
froce: contents可以給你抓啊。 03/14 16:34
froce: https://ideone.com/2K5hXn 03/14 16:35
froce: 你可以看我改過的範例 03/14 16:36
bluefantasia: f大的結果就是我想做出來的啊(泣)~但想請問一下 03/14 16:58
bluefantasia: if A and B一般是兩者成立,所以這邊是兩者都有找到 03/14 16:58
bluefantasia: 才print出來的意思嗎? 03/14 16:59
froce: 對,沒找到會傳回 None,None typeˉ當然不會有contents等 03/14 17:04
froce: 屬性,你要程式印出 None.contents,我們可愛的蟒蛇當然會 03/14 17:04
froce: 生氣氣的跟你說「你唬我喔」。 03/14 17:04
froce: 所以要檢查傳回結果都不是 None,才能存取contents屬性。 03/14 17:04
froce: 另外可以去學 pyquery,學會你也會用 CSS selector 了。 03/14 17:10
bluefantasia: 收到,感謝f大的指點 03/15 04:51