分析第二页/第三页,用BeautifulSoup添加到列表中



我正试图在网站上搜索食谱,然后展示一个随机选择的页面。为此,我制作了一段代码,当我刚拿到第一页时,它非常完美,有35个食谱。然而:我也想从第二页和第三页上获取食谱。我想我应该为此写一个循环,但我似乎做不对。我在这个代码中做错了什么?

from django.shortcuts import render
import requests
import re
from bs4 import BeautifulSoup
import random
# Create your views here.
def recipe(request):
#Create soup
page = 0
while page != 2:
webpage_response = requests.get("https://www.ah.nl/allerhande/recepten-zoeken?page=" + str(page))
webpage = webpage_response.content
soup = BeautifulSoup(webpage, "html.parser")  
recipe_links = soup.find_all('a', attrs={'class' : re.compile('^display-card_root__.*')})
recipe_pictures = soup.find_all('img', attrs={'class' : re.compile('^card-image-set_imageSet__.*')})
recipe_prep_time = [ul.find('li').text 
for ul in soup.find_all('ul',
attrs={'class': re.compile('^recipe-card-properties_root')})]

#Set up lists
links = []
titles = []
pictures = []
#create prefix for link
prefix = "https://ah.nl"
#scrape page for recipe
for link in recipe_links:
links.append(prefix + link.get('href'))
for title in recipe_links:
titles.append(title.get('aria-label'))
for img in recipe_pictures:
pictures.append(img.get('data-srcset'))
page = page +1
#create random int to select a recipe
nummer = random.randint(0,105)
print(nummer)
#select correct link for image
pic_url = pictures[nummer].split(' ')
#create context
context = {
"titles" : titles[nummer],
"pictures" : pic_url[16],
"preptime" : recipe_prep_time[nummer],
"link" : links[nummer]
}
#render page
return render(request, "randomRecipe/recipe.html", context)

您可以使用for loop进行分页

from django.shortcuts import render
import requests
import re
from bs4 import BeautifulSoup
import random
# Create your views here.
def recipe(request):
#Create soup
for page in range(1,4):
webpage_response = requests.get(f"https://www.ah.nl/allerhande/recepten-zoeken?page={page}" )
webpage = webpage_response.content
soup = BeautifulSoup(webpage, "html.parser")  
recipe_links = soup.find_all('a', attrs={'class' : re.compile('^display-card_root__.*')})
recipe_pictures = soup.find_all('img', attrs={'class' : re.compile('^card-image-set_imageSet__.*')})
recipe_prep_time = [ul.find('li').text 
for ul in soup.find_all('ul',
attrs={'class': re.compile('^recipe-card-properties_root')})]

#Set up lists
links = []
titles = []
pictures = []
#create prefix for link
prefix = "https://ah.nl"
#scrape page for recipe
for link in recipe_links:
links.append(prefix + link.get('href'))
for title in recipe_links:
titles.append(title.get('aria-label'))
for img in recipe_pictures:
pictures.append(img.get('data-srcset'))

#create random int to select a recipe
nummer = random.randint(0,105)
print(nummer)
#select correct link for image
pic_url = pictures[nummer].split(' ')
#create context
context = {
"titles" : titles[nummer],
"pictures" : pic_url[16],
"preptime" : recipe_prep_time[nummer],
"link" : links[nummer]
}
#render page
return render(request, "randomRecipe/recipe.html", context)

最新更新