python - 如何在使用硒刮擦时打印带有或不带有熊猫的漂亮列表?
问题描述
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 或类似的可读表中。
解决方案
如果我理解正确,您想从网页中抓取一些数据并将其清理干净,使其成为可用的格式。
你抓取的数据是一组手机,你可以通过品牌名称将它们分开,然后从那里找到提取每部手机的属性。每部手机的属性数量并不总是相等,因此需要一些摆弄......
这是一个开始
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)