首页 > 解决方案 > 如何在使用硒刮擦时打印带有或不带有熊猫的漂亮列表?

问题描述

import pandas as pd
import geocoder
from selenium import webdriver
import csv

g = geocoder.ip('me')
print(g.latlng)

driver = webdriver.Chrome(executable_path=r'D:\chromedriver.exe')
driver.get("https://prisguiden.no/kategorier/mobiltelefon")

variant = driver.find_element_by_class_name("category-results").text
pris = driver.find_element_by_class_name ("price-low")

print (variant)

这给了我我想要的所有信息,它只是我的数据的一个很好的展示。我用谷歌搜索了一些熊猫列表,但它不起作用,最后我想将我的数据导出到 excel 或类似的可读表中。

标签: pythonpandasseleniumselenium-webdriverexport-to-csv

解决方案


如果我理解正确,您想从网页中抓取一些数据并将其清理干净,使其成为可用的格式。

你抓取的数据是一组手机,你可以通过品牌名称将它们分开,然后从那里找到提取每部手机的属性。每部手机的属性数量并不总是相等,因此需要一些摆弄......

这是一个开始

import pandas as pd 
from selenium import webdriver 


def get_data():
    driver = webdriver.Chrome(executable_path=r'<pathtodriver>') 
    driver.get("https://prisguiden.no/kategorier/mobiltelefon")

    variant = driver.find_element_by_class_name("category-results").text 
    pris = driver.find_element_by_class_name ("price-low")

    return variant.split("\n")


def split_data(txt):
    brand = ["Apple", "Sony", "Samsung", "Huawei", "Xiaomi", "OnePlus"]
    prods = []
    prod = []
    for item in txt:
        if item in brand:
            if len(prod) > 0:
                prods.append(prod)
            prod = [item]
        else:
            prod.append(item)
    return prods


class Product:
    def __init__(self, *args):
        self.brand = args[0]
        self.model = args[1]
        self.spec = args[2]
        self.price = [a for a in args if 'priser' in a][0]
        self.other_info = [a for a in args 
                           if a not in (self.brand,
                                        self.model,
                                        self.spec,
                                        self.price)]

if __name__ == "__main__":
    data = get_data()
    li = split_data(data)
    df = pd.DataFrame([Product(*l).__dict__ for l in li])
    print(df)

推荐阅读