[問題] bs4抓取連結問題

作者: nendi (米迪)   2015-08-07 12:28:21
您好,我是一個剛學一個月的新手,有些指令還不太熟悉
我想抓取某個網頁的超連結
其中我要的連結都在 <ul class="no_listyle ar_grd"> 之下
我的程式碼如下
from bs4 import BeautifulSoup
import requests
res= requests.get('http: xxx')
#實際網址太長,我用縮網址發文被說是廣告,只好寫xxx代替
soup = BeautifulSoup(res.text)
ul = soup.findAll('ul',{'class':"no_listyle ar_grd"})
#找出來後,我想把<a href=" ">之中的超連結取出來,所以我試接著寫
for link in ul:
print(link.find('a')['href'])
但只顯現出了第一個連結,我希望能把所有超連結取出
可否哪位好心大大指導一下呢?
感謝
作者: nendi (米迪)   2015-08-07 12:31:00
實際的網址被ptt認為是廣告,我沒辦推文寫出= =
作者: Thisisnotptt (這不是PTT)   2015-08-07 12:33:00
findall之後用for loop把每個找到的element讀出來a 也用 find all找
作者: nendi (米迪)   2015-08-07 12:39:00
樓上是說link.find('a')改成linkfindAll('a')?電腦回傳TypeError: 'NoneType' object is not callable
作者: Thisisnotptt (這不是PTT)   2015-08-07 12:42:00
嗯. len(ul) 長度是多少呢,會不會ul 條件沒設定好,只找到一個
作者: nendi (米迪)   2015-08-07 12:43:00
ul print 出來有五個連結抱歉,我剛抄錯error為TypeError: list indices must be integers, not str
作者: Thisisnotptt (這不是PTT)   2015-08-07 12:49:00
怪怪,假如確定每個裡面都有link但bf找不到的話可以用regexp直接搭配用
作者: nendi (米迪)   2015-08-07 12:49:00
len(ul)為1,取len(ul)[0]為19
作者: Thisisnotptt (這不是PTT)   2015-08-07 12:50:00
但通常bs找無都是條件沒有設定好那可能要以link in ui[0]:去找
作者: nendi (米迪)   2015-08-07 13:09:00
還是沒辦法error:'int' object is not subscriptable QQ
作者: Thisisnotptt (這不是PTT)   2015-08-07 13:10:00
links = ul[0].findAll('a')for link in links : print link我這樣有找到連結,你try看看因為你用find_all去找ul,ul又只出現一次,所以BS還是把他包成list,只是裏面只會有一個,所以要去ul[0]裏那裡面才會是文檔,文檔再進去找所有ul包含的a herf就會有link了
作者: nendi (米迪)   2015-08-07 13:19:00
成功了,感謝樓上^^順道請教要怎麼只擷取href裡的網址呢?
作者: Thisisnotptt (這不是PTT)   2015-08-07 13:21:00
URL + link['href'].strip()
作者: nendi (米迪)   2015-08-07 13:21:00
感激不盡

Links booklink

Contact Us: admin [ a t ] ucptt.com