В настоящее время я изучаю Python через "Автоматизировать скучные вещи с помощью Python".
Сейчас я занимаюсь веб-скребком.
Я написал код, который получает эту цену продукта с одного сайта. Однако, когда я немного редактирую свой код для работы на другом веб-сайте, это, похоже, не работает, и Beautiful Soup возвращает пустой список из CSS.
Это мой рабочий код.
import bs4, requests, re
def getPrice(productUrl):
res = requests.get(productUrl)
res.raise_for_status()
soup = bs4.BeautifulSoup(res.text, 'html.parser')
# Go through CSS and get price
source = soup.select('#product_addtocart_form > div.product-shop > div.details-info')
element = source[0].text.strip()
# Regex for getting the price from the rest of the CSS.
pattern = re.compile(r"""R([1-9]\d*)(\.\d\d)?(?![\d.])""")
# Get price from string using regex pattern
trueprice = re.split(pattern, element)
return("The product's price is : R " + trueprice[1])
product = "https://www.faithful-to-nature.co.za/green-home-paper-straws-in-compostable-bag"
weblink = getPrice(product)
print(weblink)
Это мой отредактированный код для другого сайта, который не работает.
Я закомментировал некоторый код, потому что он не выполняет никаких функций, в то время как в списке нет данных.
import bs4, requests, re
def getPrice(productUrl):
res = requests.get(productUrl)
res.raise_for_status() # Check for any errors in request
soup = bs4.BeautifulSoup(res.text, 'html.parser')
# Go through CSS and get price
csssource = soup.select('#shopfront-app > div > div.grid-container.pdp-grid-container > div.grid-x.grid-margin-x > div > div > div > div > div.cell.medium-auto > div.pdp-core-module_actions_mdYzm > div.sf-buybox.pdp-core-module_buybox_q5wLs.buybox-module_buybox_eWK2S')
#element = csssource[0].text.strip()
# Regex for getting the price from the rest of the CSS.
pattern = re.compile(r"""R([1-9]\d*)(\.\d\d)?(?![\d.])""")
#trueprice = re.split(pattern, element)
#return("The product's price is : R " + trueprice[1])
print(csssource)
test1 = "https://www.takealot.com/lego-classic-basic-brick-set-11002/PLID53430493"
weblink = getPrice(test1)
print(weblink)
На обоих сайтах я получил CSS-селектор, используя метод проверки в Chrome. Я пытался использовать более широкие CSS-селекторы, но Beautiful Soup по-прежнему возвращает пустой список.
Как заставить Beautiful Soup вернуть правильный список / CSS-селектор?