不能使用bs4在div中收集href

问题描述 投票:1回答:3

我是一个新手试图使用bs4废弃这个网站,从指定的div收集href然后通过hrefs导航产品页面并收集数据,但我坚持收集href。如果有人帮助我,我会非常高兴:

import urllib.request
from bs4 import BeautifulSoup

urlpage = 'https://www.digikala.com/search/category-tire/' 
print(urlpage)

# scrape the webpage using beautifulsoup

# query the website and return the html to the variable 'page'
page = urllib.request.urlopen(urlpage)

# parse the html using beautiful soup and store in variable 'soup'
soup = BeautifulSoup(page, 'html.parser')

# find product items
results = soup.find_all('div', attrs={'class': 'c-product-box__title'})
print('BeautifulSoup - Number of results', len(results))

这是第一个结果,虽然当你打印结果时会有36个div,我只是复制了第一个,我尽力不要问并找到答案但是我甚至没有接近,所以我很抱歉它很简单。

<div class="c-product-box__title"><a href="/product/dkp-539563/لاستیک-خودرو-میشلن-مدل-primacy-3-سایز-20555r16-دو-حلقه" target="_blank">لاستیک خودرو میشلن مدل Primacy 3 سایز 205/55R16 - دو حلقه</a></div>
python web-scraping beautifulsoup
3个回答
0
投票

您可以使用类和类型选择器结合子组合子来获取div的子a标记(通过类选择器指定div)。在这种情况下36所以不需要限制孩子返回。

import requests
from bs4 import BeautifulSoup 

url = 'https://www.digikala.com/search/category-tire/'
r = requests.get(url)
soup = BeautifulSoup(r.content,"lxml")
links = [link['href'] for link in soup.select('.c-product-box__title > a')]
print(len(links))
print(links[0])

2
投票
# -*- coding: utf-8 -*-
html_doc = '<div class="c-product-box__title"><a href="/product/dkp-539563/ﻼﺴﺗیک-ﺥﻭﺩﺭﻭ-ﻡیﺶﻠﻧ-ﻡﺪﻟ-primacy-3-ﺱﺍیﺯ-20555r16-ﺩﻭ-ﺢﻠﻘﻫ" target="_blank">ﻼﺴﺗیک ﺥﻭﺩﺭﻭ ﻡیﺶﻠﻧ ﻡﺪﻟ Primacy 3 ﺱﺍیﺯ 205/55R16 - ﺩﻭ ﺢﻠﻘﻫ</a></div>"'

from bs4 import BeautifulSoup
soup = BeautifulSoup(html_doc, 'html.parser')

for div in soup.find_all('div', class_='c-product-box__title'):
  print div.a['href']

输出:

$ python a.py
/product/dkp-539563/لاستیک-خودرو-میشلن-مدل-primacy-3-سایز-20555r16-دو-حلقه

https://www.crummy.com/software/BeautifulSoup/bs4/doc/#beautiful-soup-documentation


0
投票

对于每个生成的div,首先获取子a元素,然后获取其href属性的值,如下所示:

results = soup.find_all('div', attrs={'class': 'c-product-box__title'})
print('BeautifulSoup - Number of results', len(results))

links = []
for result in results:
    links.append(result.a['href'])

print(links)

这导致36个链接的列表。以下是前两个示例:

['/product/dkp-539563/لاستیک-خودرو-میشلن-مدل-primacy-3-سایز-20555r16-دو-حلقه',
'/product/dkp-959932/لاستیک-خودرو-گلدستون-مدل-2020-2000-سایز-1856514-دو-حلقه-مناسب-برای-انواع-رینگ-14',
© www.soinside.com 2019 - 2024. All rights reserved.