无法使用bs4在div内收集href

时间:2019-03-31 21:06:39

标签: python web-scraping beautifulsoup

我是一个新手,尝试通过bs4来抓取该网站,方法是从指定的div收集href,然后通过href导航产品页面并收集数据,但是我仍然坚持收集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>

3 个答案:

答案 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

答案 1 :(得分: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个链接的列表。这是前2个示例:

['/product/dkp-539563/لاستیک-خودرو-میشلن-مدل-primacy-3-سایز-20555r16-دو-حلقه',
'/product/dkp-959932/لاستیک-خودرو-گلدستون-مدل-2020-2000-سایز-1856514-دو-حلقه-مناسب-برای-انواع-رینگ-14',

答案 2 :(得分: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])