не может собрать href внутри div, используя bs4 - PullRequest
1 голос
/ 01 апреля 2019

Я новичок, пытающийся удалить этот сайт, используя bs4, собирая href из указанного div, а затем перемещаясь по страницам продукта по 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 class="c-product-box__title"><a href="/product/dkp-539563/لاستیک-خودرو-میشلن-مدل-primacy-3-سایز-20555r16-دو-حلقه" target="_blank">لاستیک خودرو میشلن مدل Primacy 3 سایز 205/55R16 - دو حلقه</a></div>

Ответы [ 3 ]

2 голосов
/ 01 апреля 2019
# -*- 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 голосов
/ 01 апреля 2019

Вы можете использовать класс и селектор типа в сочетании с дочерним комбинатором, чтобы получить дочерние a теги div (указав 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])
0 голосов
/ 01 апреля 2019

Для каждого результирующего 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',
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...