使用Beautiful Soup在多个div上循环时出现问题



下面是我使用BS4进行抓取的python代码。当我尝试运行循环时,它会打印相同的数据,还请告诉我如何在python中运行分页循环。

import requests
from bs4 import BeautifulSoup as bs
url = 'https://www.yellowpages.com/los-angeles-ca/restaurants'
page = requests.get(url)
soup = bs(page.content,'html.parser')
#print(len(soup))
containers = soup.find_all("div",{"class","v-card"})
#print(containers[0])
name = containers.find_all("a",{"class","business-name"})
print(name[0].get_text())
phone = soup.find_all("div",{"class","phone"})
#print(phone[0].get_text())
add = soup.find_all("p",{"class","adr"})
#print(add[0].get_text())

for items in containers: 
name_soup = containers.find("a",{"class","business-name"})
print(name_soup)

此行将给您一个错误-

name = containers.find_all("a",{"class","business-name"})

因为containers是一个列表,而不是一个可以调用find_all((方法的元素。

您需要在循环中访问容器,因为它是您在前一行提取的div标记的列表。

这是您的上一行,您正在提取列表中的所有div标记(具有class=v-card(-

containers = soup.find_all("div",{"class","v-card"})
for items in containers: 
name_soup = containers.find("a",{"class","business-name"})
print(name_soup)

您没有使用items变量;你一直在containers中搜索。

使用items.find(...)

请告诉我如何在python中运行分页循环。

这要广泛得多,而且实际上取决于目标网站。看看当你点击网站上的(下一页(按钮时会发生什么变化。通常它只是一个查询字符串参数(例如?p=3(。然后在GET中复制它。

最新更新