我正在尝试检索网站中的所有类别和子类别。一旦我进入该类别,我就可以使用BeautifulSoup来提取该类别中的每一件产品。但是,我正在为类别的循环而苦苦挣扎。我将其用作测试网站:http://www.shophive.com。
如何循环浏览网站左侧的每个类别以及子类别?我想提取类别/子类别中的所有产品并显示在我的页面上。
答案 0 :(得分:0)
from bs4 import BeautifulSoup
import user_agent
import requests
useragent = user_agent.generate_user_agent(device_type='desktop')
headers = {'User-Agent': useragent}
req = requests.get('http://www.shophive.com/', headers=headers)
html = req.text
soup = BeautifulSoup(html, 'html.parser')
main_category_links = []
for div in soup.find_all('div', class_='parentMenu arrow'):
main_category_links.append(soup.find('a').get('href'))
print(main_category_links)
subcategory_links = []
for link in soup.find_all('a', class_='itemMenuName'):
subcategory_links.append(link.get('href'))
print(subcategory_links)
我会一点一点地为你打破这个。
useragent = user_agent.generate_user_agent(device_type='desktop')
headers = {'User-Agent': useragent}
req = requests.get('http://www.shophive.com/', headers=headers)
html = req.text
这里我们只是发出请求并存储HTML。我使用一个名为“user_agent”的模块来生成要在标题中使用的用户代理,只是我的偏好。
<div class="parentMenu arrow">
<a href="http://www.shophive.com/year-end-clearance-sale">
<span>New Year's Clearance Sale</span>
</a>
</div>
主要类别的链接是这样存储的,所以为了只提取链接,我们这样做:
main_category_links = []
for div in soup.find_all('div', class_='parentMenu arrow'):
main_category_links.append(soup.find('a').get('href'))
我们迭代soup.find_all('div', class_='parentMenu arrow')
的结果,因为我们想要的链接元素是这些元素的子元素。然后我们将soup.find('a').get('href')
附加到主类别链接列表中。我们这次使用soup.find
因为我们只需要一个结果,然后我们得到href的内容。
<a class="itemMenuName level1" href="http://www.shophive.com/apple/mac">
<span>Mac / Macbooks</span>
</a>
子类别是这样存储的,注意这次“a”标签有一个类,这使我们更容易找到它。
subcategory_links = []
for link in soup.find_all('a', class_='itemMenuName'):
subcategory_links.append(link.get('href'))
这里我们迭代soup.find_all('a', class_='itemMenuName')
。当您在BeautifulSoup中搜索课程时,您只需搜索课程名称的部分即可。在这种情况下,这对我们很有帮助,因为班级名称从itemMenuName level1
到itemMenuName level2
不等。这些元素已经在它们内部具有链接,因此我们只提取包含link.get('href')
的URL的href的内容,并将其附加到我们的子类别链接列表中。