作者bluefantasia (鏡華)
看板Python
標題[問題] BeautifulSoup 新手問題
時間Wed Mar 14 11:56:01 2018
各位前輩好,小弟
剛開始接觸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: 你可以看我改過的範例 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