使用beautifulsoup刮擦类别和子类别

时间:2018-03-04 06:55:58

标签: beautifulsoup electron

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

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

1 个答案:

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