Python - 从拥有类的div获取所有链接

时间:2011-12-23 14:00:31

标签: python

我正在使用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个值

4 个答案:

答案 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()