[问题] 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