Beautifulsoup find_all找不到所有

时间:2014-12-07 19:41:26

标签: python beautifulsoup web-crawler findall

我目前正在开发一个webcrawler。我希望我的代码从我抓取的所有网址中获取文本。函数getLinks()找到我想从中获取数据的链接并将它们放入数组中。该阵列目前有12个链接,如下所示: 'http://www.computerstore.nl/product/142504/category-100852/wd-green-wd30ezrx-3-tb.html'

这是我的函数的代码,它使用我从getLinks()获取的url遍历我的数组,并从中获取数据。所以我遇到的问题是它有时会返回文本6次,有时是8或10.但不是应该的12次。

def getSpecs(): 
    i = 0 
    while (i < len(clinks)):
        r = (requests.get(clinks[i]))
        s = (BeautifulSoup(r.content))
        for item in s.find_all("div", {"class" :"productSpecs roundedcorners"}):
            print item.find('h3')
        i = i + 1 

getLinks()
getSpecs()

我该如何解决这个问题?请帮忙。

提前致谢!

1 个答案:

答案 0 :(得分:2)

以下是具有多个修复程序的改进代码:

代码:

from urlparse import urljoin

from bs4 import BeautifulSoup
import requests

base_url = 'http://www.computerstore.nl'
curl = ["http://www.computerstore.nl/category/100852/interne-harde-schijven.html?6437=19598"]

session = requests.Session()
for url in curl:
    soup = BeautifulSoup(session.get(url).content)
    links = [urljoin(base_url, item['href']) for item in soup.select("div.product-list a.product-list-item--image-link")]

    for link in links:
        soup = BeautifulSoup(session.get(link).content)
        print soup.find('span', itemprop='name').get_text(strip=True)

它抓取每个产品链接,跟随它并打印出产品标题(12个产品):

WD Red WD20EFRX 2 TB
WD Red WD40EFRX 4 TB
WD Red WD30EFRX 3 TB
Seagate Barracuda ST1000DM003 1 TB
WD Red WD10EFRX 1 TB
Seagate Barracuda ST2000DM001 2 TB
Seagate Barracuda ST3000DM001 3 TB
WD Green WD20EZRX 2 TB
WD Red WD60EFRX 6 TB
WD Green WD40EZRX 4 TB
Seagate NAS HDD ST3000VN000 3 TB
WD Green WD30EZRX 3 TB