用逗号分隔Python web抓取的数据

用逗号分隔Python web抓取的数据,python,Python,我不熟悉使用Python进行web抓取,并在网上找到了一个快速教程,其中包含一些示例代码。我调整了一些代码,为结果添加了另一个方面(输出为csv文件)。代码正在抓取不同笔记本电脑的信息(名称、价格、等级、规格) 我遇到的问题是在输出中用逗号分隔规格 以下是我正在使用的代码: from selenium import webdriver from bs4 import BeautifulSoup import pandas as pd from webdriver_

我不熟悉使用Python进行web抓取,并在网上找到了一个快速教程,其中包含一些示例代码。我调整了一些代码,为结果添加了另一个方面(输出为csv文件)。代码正在抓取不同笔记本电脑的信息(名称、价格、等级、规格)

我遇到的问题是在输出中用逗号分隔规格

以下是我正在使用的代码:

    from selenium import webdriver
    from bs4 import BeautifulSoup
    import pandas as pd
    from webdriver_manager.chrome import ChromeDriverManager

    driver = webdriver.Chrome(ChromeDriverManager().install())

    products=[]
    prices=[]
    ratings=[]
    specs=[]
    driver.get('https://www.flipkart.com/laptops/~buyback-guarantee-on-laptops-/pr?sid=6bo%2Cb5g&uniqBStoreParam1=val1&wid=11.productCard.PMU_V2')

    content = driver.page_source
    soup = BeautifulSoup(content)
    for a in soup.find_all('a', href=True, attrs={'class':'_31qSD5'}):
        name = a.find('div', attrs={'class':'_3wU53n'})
        price = a.find('div', attrs={'class':'_1vC4OE _2rQ-NK'})
        rating = a.find('div', attrs={'class':'hGSR34'})
        spec = a.find('div', attrs={'class':'_3ULzGw'})
        products.append(name.text)
        prices.append(price.text)
        ratings.append(rating.text)
        specs.append(spec.text)

    df = pd.DataFrame({'Product name':products, 'Price':prices, 'Rating':ratings, 'Tech Specs':specs})
    df.to_csv('products.csv', index=False, encoding='utf-8')
以下是电流输出:

技术规格

英特尔Core i5处理器(第五代)8 GB DDR3 RAM64位Mac OS操作系统128 GB SSD 33.78厘米(13.3英寸)显示器1年保修期

预装正版Windows 10操作系统(包括内置安全、免费自动更新、最新功能)Intel Core i5处理器(第七代)8 GB DDR4 RAM64位Windows 10操作系统1 TB HDD39.62 cm(15.6英寸)显示器1年现场保修

以下是我希望输出的外观:

技术规格

Intel Core i5处理器(第五代),8 GB DDR3 RAM,64位Mac OS操作系统,128 GB SSD,33.78厘米(13.3英寸)显示屏,1年保修期

预装正版Windows 10操作系统(包括内置安全、免费自动更新、最新功能)、Intel Core i5处理器(第七代)、8 GB DDR4 RAM、64位Windows 10操作系统、1 TB HDD、39.62厘米(15.6英寸)显示屏、1年现场保修


感谢您的帮助。提前谢谢

如果需要,您应该拆分技术规格。现在你写技术规格,因为它是。请查看更新的代码

from selenium import webdriver
from bs4 import BeautifulSoup
import pandas as pd
from webdriver_manager.chrome import ChromeDriverManager

driver = webdriver.Chrome(ChromeDriverManager().install())

products=[]
prices=[]
ratings=[]
specs=[]
driver.get('https://www.flipkart.com/laptops/~buyback-guarantee-on-laptops-/pr?sid=6bo%2Cb5g&uniqBStoreParam1=val1&wid=11.productCard.PMU_V2')

content = driver.page_source
soup = BeautifulSoup(content)
for a in soup.find_all('a', href=True, attrs={'class':'_31qSD5'}):
    name = a.find('div', attrs={'class':'_3wU53n'})
    price = a.find('div', attrs={'class':'_1vC4OE _2rQ-NK'})
    rating = a.find('div', attrs={'class':'hGSR34'})
    spec = a.find('div', attrs={'class':'_3ULzGw'})
    products.append(name.text)
    prices.append(price.text)
    ratings.append(rating.text)
    specs.append(", ".join([l.text for l in spec.find_all('li')]))

df = pd.DataFrame({'Product name':products, 'Price':prices, 'Rating':ratings, 'Tech Specs':specs})
df.to_csv('products.csv', index=False, encoding='utf-8', sep=";")

我迭代了所有的规范,并使用join将它们组合在一起,还将csv文件列分隔符更改为

selenium
不适用于这种情况,因为数据已经在
HTML
script
标记中可见,因此您可以使用
请求
模块和
bs4
加载
JSON
数据,如下所示:

导入请求
从bs4导入BeautifulSoup
进口稀土
导入json
def主(url):
r=请求。获取(url)
soup=BeautifulSoup(r.content'html.parser')
script=soup.find(“script”,id=“is_script”).text
target=re.search(r“uu初始状态uu=({.+});$”,脚本)。组(1)
data=json.load(目标)
#打印(json.dumps(data,indent=4))以在良好的视图中查看它
打印(data.keys())#这是一个命令,所以你可以处理它。
主要(”https://www.flipkart.com/laptops/~笔记本电脑回购担保-/pr?sid=6bo,b5g&uniqBStoreParam1=val1&wid=11.productCard.PMU_V2“)

您为添加加入而进行的编辑非常有效,谢谢。使用后,我保留了正常的柱分隔符;将所有列名放在同一列中,并将每个等级库划分为单独的列。保持正常分隔符可以完美地格式化所有内容。