我创建了一个脚本来从网页中获取不同产品的链接。我的意图是仅在产品带有Ajouter au panier
符号(即Add to Basket
)时才刮除这些链接。 html结构非常简单易用,但是获取所需链接的逻辑似乎很棘手。我使用了三个不同的链接来显示变化。
很少有URL可以找到所需的产品,但是仍然有一些目录(如果我使用它们的链接)可以产生更多的产品。查看图片链接,亲自看看。我在第一个图像中的目录周围画了圈,仍然可以生产所需的产品,而在该页面中,所需的产品很少。
这是我编写的脚本:
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
符号的产品链接?
答案 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)