Python - 从具有特定类的div中获取所有链接

14 投票
4 回答
34630 浏览
提问于 2025-04-17 08:54

我正在使用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'];

但是我发现返回的链接列表比我预期的要少。当我检查时,这段代码只输出了3个链接,但实际上应该有超过10个链接。

4 个回答

0

因为你每个

里只输出一个链接,而从那个网站上看,里面有多个链接,每个链接都在自己的
  • 里,而且每个
      里有多个
    • 。你需要遍历所有的
  • 3

    如果你使用的是Python 3,可以参考Simon的回答,只需要做以下修改:

    from urllib.request import urlopen
    from bs4 import BeautifulSoup
    
    text = urlopen(base_url).read()
    
    42

    在这个页面上,只有三个带有'makers'类的<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']
    

    撰写回答