使用beautifulsoup刮擦类别和子类别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用beautifulsoup刮擦类别和子类别相关的知识,希望对你有一定的参考价值。

我正在尝试检索网站中的所有类别和子类别。一旦我进入该类别,我就可以使用BeautifulSoup来提取该类别中的每一件产品。但是,我正在为类别的循环而苦苦挣扎。我正在使用它作为测试网站:http://www.shophive.com

如何遍历每个类别以及网站左侧的子类别?我想提取类别/子类别中的所有产品并显示在我的页面上。

答案
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 level1itemMenuName level2不等。这些元素已经在它们内部具有链接,因此我们只需使用link.get('href')提取包含URL的href的内容,并将其附加到我们的子类别链接列表中。

以上是关于使用beautifulsoup刮擦类别和子类别的主要内容,如果未能解决你的问题,请参考以下文章

所有产品(类别和子类别产品)都计入 magento 中的类别列表页面

Django,类别和子类别

在将数据插入书籍表时选择类别和子类别

如何在 Magento 中使用产品 URL 附加类别和子类别 slug

如何获取所有类别和子类别?

处理类别和子类别 MySQL 或 JSON