Sebagai judul, saya bisa mendapatkan nilai hanya di halaman pertama, tetapi saya tidak bisa mendapatkan nilai halaman demi halaman dengan for-in-loop. Saya sudah memeriksa kode saya, tetapi saya masih bingung dengan itu. Bagaimana saya bisa mendapatkan nilai itu di setiap halaman?

# Imports Required
!pip install selenium
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
import requests
from bs4 import BeautifulSoup

browser = webdriver.Chrome(executable_path='./chromedriver.exe')
wait = WebDriverWait(browser,5)
output = list()
for i in range(1,2): 
    browser.get("https://www.rakuten.com.tw/shop/watsons/product/?l-id=tw_shop_inshop_cat&p={}".format(i))
    
    # Wait Until the product appear
    wait.until(EC.presence_of_element_located((By.XPATH,"//div[@class='b-content b-fix-2lines']")))

    # Get the products link
    product_links = browser.find_elements(By.XPATH,"//div[@class='b-content b-fix-2lines']/b/a")
    
    # Iterate over 'product_links' to get all the 'href' values
  
    for link in (product_links):
        print(link.get_attribute('href'))
        browser.get(link.get_attribute('href'))
        soup = BeautifulSoup(browser.page_source)
        products =[]
        product = {}
        product['商品名稱'] = soup.find('div',class_="b-subarea b-layout-right shop-item ng-scope").h1.text.replace('\n','')
        product['價錢'] = soup.find('strong',class_="b-text-xlarge qa-product-actualPrice").text.replace('\n','')
        all_data=soup.find_all("div",class_="b-container-child")[2]
        main_data=all_data.find_all("span")[-1]
        product['購買次數'] = main_data.text
        products.append(product)
        print(products)
    
       
       


1
鄭鼎彥 27 November 2021, 10:59
Mengapa tidak? Apakah Anda mendapatkan kesalahan? Jika demikian, apa itu?
 – 
Code-Apprentice
27 November 2021, 11:02

1 menjawab

Jawaban Terbaik
    product_links = browser.find_elements(By.XPATH,"//div[@class='b-content b-fix-2lines']/b/a")
    
    # Iterate over 'product_links' to get all the 'href' values
  
    for link in (product_links):
        print(link.get_attribute('href'))
        browser.get(link.get_attribute('href'))

Masalahnya adalah ketika Anda melakukan browser.get(), itu membatalkan elemen HTML yang dirujuk oleh product_links karena tidak ada lagi di halaman saat ini. Anda harus memasukkan semua atribut 'href' ke dalam array. Salah satu caranya adalah dengan pemahaman daftar:

links = [link.get_attribute('href') for link in product_links]

Sekarang Anda dapat mengulang string di links untuk memuat halaman baru.

Dengan mengatakan itu, Anda harus melihat perpustakaan scrapy yang dapat melakukan banyak pekerjaan berat untuk Anda.

0
Code-Apprentice 27 November 2021, 11:06
Berhasil! Terima kasih. Saya melihat jika saya memasukkannya ke dalam array, saya akan mendapatkan nilai yang tepat. Saya akan mempelajari apa yang Anda sarankan.
 – 
鄭鼎彥
27 November 2021, 12:40