代码之家  ›  专栏  ›  技术社区  ›  Yungi Jeong

在使用selenium进行web抓取后,我在csv文件中得到了奇怪的结果。。内容不是特定的内容,而是html代码

  •  0
  • Yungi Jeong  · 技术社区  · 3 年前
    from selenium import webdriver
    from selenium.webdriver.chrome.service import Service
    from webdriver_manager.chrome import ChromeDriverManager
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver.common.by import By
    
    import time
    import csv
    
    
    driver = webdriver.Chrome('/Users/myname/Desktop/web_crawling/chromedriver')
    
    driver.get('https://www.naver.com')
    time.sleep(2)
    
    
    driver.find_element(by=By.CSS_SELECTOR, value='a.nav.shop').click()
    
    search = driver.find_element(by=By.CSS_SELECTOR,value='._searchInput_search_input_QXUFf')
    search.click()
    
    search.send_keys("아이폰 13")
    search.send_keys(Keys.ENTER)
    
    before_h = driver.execute_script("return window.scrollY")
    
    while True:
        driver.find_element(by=By.CSS_SELECTOR, value='body').send_keys(Keys.END)
        time.sleep(1)
    
        after_h = driver.execute_script("return window.scrollY")
    
        if after_h == before_h:
            break
        before_h = after_h
    
    #create csv file
    f = open(r"/Users/yungijeong/Desktop/web_crawling/data.csv", 'w', encoding='UTF8')
    csvWriter = csv.writer(f)
    
    items = driver.find_elements(by=By.CSS_SELECTOR, value=".basicList_info_area__17Xyo")
    
    for item in items:
        names = item.find_elements(by=By.CSS_SELECTOR,  value=".basicList_link__1MaTN")
        for name in names:
            print(name.text)
    
        try:
            prices = item.find_elements(by=By.CSS_SELECTOR, value=".price_num__2WUXn")
            for price in prices:
               print(price.text)
        except:
            print("판매중단")
        links = item.find_elements(by=By.CSS_SELECTOR, value=".basicList_title__3P9Q7 > a")
        for link in links:
            print(link.get_attribute('href'))
        print(name, price, link)
    
        #adding inside the csv files
    
        csvWriter.writerow([name, price, link])
    
    f.close()
    

    在这里,我试图在一个古兰经购物网站上搜集iPhone的详细信息和价格。我编写了自己的代码,这样webdriver就可以自动进入该网站并获取所有详细信息(例如产品的价格和链接)。最后,它应该制作一个csv文件,并将所有刮取的数据粘贴到其中。

    代码运行得很好,但当我将其导出到csv文件时,它看起来是这样的: The result in csv

    内容似乎没有正确导出。。每个代码看起来都像HTML代码。。。你们有没有人有同样的问题?在终端中,看起来webdrvier正确区分了数据,但结果是,它以一种奇怪的方式导出了数据。如果你有同样的问题,请分享!!

    1 回复  |  直到 3 年前
        1
  •  0
  •   furas    3 年前

    我想问题是你 print() 值,但不指定给变量。

    你有

    print(name.text)
    print(price.text)
    print(link.get_attribute('href'))
    

    但你忘了

    name = name.text
    price = price.text
    link = link.get_attribute('href')
    

    或者你应该写

    csvWriter.writerow([name.text, link.text, link.get_attribute('href')])