无法获取所有不同项目的链接

时间:2018-12-24 08:20:13

标签: python python-3.x web-scraping beautifulsoup

我创建了一个脚本来从网页中获取不同产品的链接。我的意图是仅在产品带有Ajouter au panier符号(即Add to Basket)时才刮除这些链接。 html结构非常简单易用,但是获取所需链接的逻辑似乎很棘手。我使用了三个不同的链接来显示变化。

很少有URL可以找到所需的产品,但是仍然有一些目录(如果我使用它们的链接)可以产生更多的产品。查看图片链接,亲自看看。我在第一个图像中的目录周围画了圈,仍然可以生产所需的产品,而在该页面中,所需的产品很少。

check out the variation

another one: only catalogues

这是我编写的脚本:

import requests 
from urllib.parse import urljoin
from bs4 import BeautifulSoup

urls = (
    "https://www.directmedical.fr/categorie/aspirateurs-de-mucosite.html",
    "https://www.directmedical.fr/categorie/literie.html",
    "https://www.directmedical.fr/categorie/vetement.html"
    )

def get_links(link):
    r = requests.get(link)
    soup = BeautifulSoup(r.text,"lxml")
    for item in soup.select(".browseCategoryName a"):
        ilink = urljoin(link,item.get("href"))
        print(ilink)

if __name__ == '__main__':
    for url in urls:
        get_links(url)

如何使用这些网址获得所有带有Ajouter au panier符号的产品链接?

1 个答案:

答案 0 :(得分:2)

如果您需要同时从初始页面和“类别”页面中选择“产品”链接(如果初始页面中没有产品),请尝试

import requests 
from urllib.parse import urljoin
from bs4 import BeautifulSoup

domain = "https://www.directmedical.fr/"
urls = (
    "https://www.directmedical.fr/categorie/aspirateurs-de-mucosite.html",
    "https://www.directmedical.fr/categorie/literie.html",
    "https://www.directmedical.fr/categorie/vetement.html"
    )

def get_links(link):
    r = requests.get(link)
    soup = BeautifulSoup(r.text, "lxml")
    products = soup.select(".browseElements td > a")
    if products:
        for item in products:
            ilink = urljoin(link, item.get("href"))
            print(ilink)
    else:
        categories = [urljoin(domain, item.get("href")) for item in soup.select(".browseChildsCategorys td > a")]
        for category in categories:
            c = requests.get(category)
            c_soup = BeautifulSoup(c.text, "lxml")
            for item in c_soup.select(".browseElements td > a"):
                c_link = urljoin(domain, item.get("href"))
                print(c_link)

if __name__ == '__main__':
    for url in urls:
        get_links(url)