我是一个新手试图使用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>
您可以使用类和类型选择器结合子组合子来获取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])
# -*- 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。
对于每个生成的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',