【问题标题】:add extracted data as a new column in the existing csv-python将提取的数据添加为现有 csv-python 中的新列
【发布时间】:2018-07-06 11:49:30
【问题描述】:

请大家帮忙。请指出当提取的评论被写入hotelreview.csv 中的 3 个单独列时我错了,我该如何解决这个问题以便将它们写入 1 列?以及如何根据下面的代码为其添加标题名称“review”。 而且我还想将新提取的数据(“评论”列)添加到现有的 csv 'hotel_FortWorth.csv' 中。我刚刚将提取的信息添加到一个新的 csv 中,我不知道如何将 2 个文件组合在一起或任何其他方式?网址可以重复以匹配评论。请! 谢谢!

文件“hotel_FortWorth.csv”有 3 列,例如:

           Name                         link
1    Omni Fort Worth Hotel     https://www.tripadvisor.com.au/Hotel_Review-g55857-d777199-Reviews-Omni_Fort_Worth_Hotel-Fort_Worth_Texas.html
2    Hilton Garden Hotel       https://www.tripadvisor.com.au/Hotel_Review-g55857-d2533205-Reviews-Hilton_Garden_Inn_Fort_Worth_Medical_Center-Fort_Worth_Texas.html
3......
...

我使用现有 csv 中的 url 来提取评论,代码如下所示:

import requests
from unidecode import unidecode
from bs4 import BeautifulSoup
import pandas as pd    

file = []
data = pd.read_csv('hotel_FortWorth.csv', header = None)
df = data[2]

for url in df[1:]:
    print(url)
    thepage = requests.get(url).text
    soup = BeautifulSoup(thepage, "html.parser")
    resultsoup = soup.find_all("p", {"class": "partial_entry"})
    file.extend(resultsoup)

    with open('hotelreview.csv', 'w', newline='') as fid:
    for review in file:
        review_list = review.get_text()
        fid.write(unidecode(review_list+'\n'))

预期结果:

    name          link         review
1   ...           ...         ...
2
....

【问题讨论】:

    标签: python csv multiple-columns add


    【解决方案1】:

    您可以使用 pandas 来创建新的 CSV。

    例如:

    import requests
    from unidecode import unidecode
    from bs4 import BeautifulSoup
    import pandas as pd
    
    data = pd.read_csv('hotel_FortWorth.csv')
    review = []
    for url in data["link"]:
        print(url)
        thepage = requests.get(url).text
        soup = BeautifulSoup(thepage, "html.parser")
        resultsoup = soup.find_all("p", {"class": "partial_entry"})
        review.append(unidecode(resultsoup))
    data["review"] = review
    data.to_csv('hotelreview.csv')
    

    【讨论】:

    • 嗨。感谢您的时间。运行此程序时出错。 review.append(unidecode(resultsoup)) 文件“E:\Python\venv\lib\site-packages\unidecode_init_.py”,第 48 行,在 unidecode_expect_ascii bytestring = string.encode('ASCII ') AttributeError: 'NoneType' 对象没有属性 'encode'
    • 看起来resultsoup 是空的。您可能需要调整您的 find_all 参数,或者您可以使用 if 条件来忽略 None 值
    • 我收到了这个错误:pandas.errors.EmptyDataError: No columns to parse from file
    • 啊,是的,包含标题。谢谢
    猜你喜欢
    • 2013-05-02
    • 2021-07-17
    • 1970-01-01
    • 2016-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多