我正在使用BeautifulSoup从这个网址获取手机的所有链接 http://www.gsmarena.com/samsung-phones-f-9-0-p2.php
我的以下代码是:
import urllib2
from BeautifulSoup import BeautifulSoup
url = "http://www.gsmarena.com/samsung-phones-f-9-0-p2.php"
text = urllib2.urlopen(url).read();
soup = BeautifulSoup(text);
data = soup.findAll('div',attrs={'class':'makers'});
for i in data:
print "http://www.gsmarena.com/" + i.ul.li.a['href'];
但是当我检查时,返回的url列表比预期的输出短,此代码输出3个值,但结果应显示超过10个值
答案 0 :(得分:28)
该页面中只有三个<div>
元素,其中包含一组“制作者”,这将打印每个div的第一个链接,总共三个。
这可能更符合您的要求:
import urllib2
from BeautifulSoup import BeautifulSoup
url = "http://www.gsmarena.com/samsung-phones-f-9-0-p2.php"
text = urllib2.urlopen(url).read()
soup = BeautifulSoup(text)
data = soup.findAll('div',attrs={'class':'makers'})
for div in data:
links = div.findAll('a')
for a in links:
print "http://www.gsmarena.com/" + a['href']
答案 1 :(得分:0)
取自http://www.crummy.com/software/BeautifulSoup/download/2.x/documentation.html:
例如,如果您只想获得具有非空“href”属性的“a”标签, 你会打电话给
soup.fetch('a', {'href':re.compile('.+')})
。如果你想获得所有标签 如果“width”属性为100,您可以调用soup.fetch(attrs={'width':100})
。
试试这个:data = soup.findAll('div',attrs={'class':re.compile('.+')});
应该获取所有存在类属性而不是空的div。
答案 2 :(得分:0)
因为你每个div只输出一个链接,而从那个站点可以清楚地看到有多个链接,每个链接都在自己的li中,每个ul有多个lis。你需要遍历所有的lis。
答案 3 :(得分:0)
如果你有Python 3,你可以使用Simon的答案进行以下更改:
from urllib.request import urlopen
from bs4 import BeautifulSoup
text = urlopen(base_url).read()