【问题标题】:Trying to loop through URLs and save contents, as a data frame, to text file尝试遍历 URL 并将内容作为数据框保存到文本文件
【发布时间】:2016-07-06 12:29:40
【问题描述】:

我认为这段代码非常接近正确,但有些东西把它扔掉了。我正在尝试遍历 10 个 URL 并将每个 URL 的内容下载到一个文本文件中,并确保在 dataframe 中所有内容都井然有序。

import pandas as pd
rawHtml = ''
url = r'http://www.pga.com/golf-courses/search?page=" + i + "&searchbox=Course%20Name&searchbox_zip=ZIP&distance=50&price_range=0&course_type=both&has_events=0'
g = open("C:/Users/rshuell001/Desktop/MyData.txt", "w")
for i in range(0, 10):      
    df = pd.DataFrame.from_csv(url)
    print(df)
    g.write(str(df))
    g.close()

我得到的错误是:

CParserError: Error tokenizing data.
C error: Expected 1 fields in line 22, saw 2

我不知道那是什么意思。我只有 9 行代码,所以我不知道为什么它在第 22 行提到了一个问题。

有人可以推动我完成这项工作吗?

【问题讨论】:

  • df = pd.DataFrame.from_csv(url) 行是导致错误的行,第 22 行在网页中可能是因为它指向的是 html 页面而不是 csv...

标签: python csv python-3.x url pandas


【解决方案1】:

pandas.DataFrame.from_csv() 采用第一个参数,它是路径或类似文件的句柄,其中任何一个都应该指向有效的 CSV 文件。

您正在为它提供一个 URL。

您似乎想使用不同的功能:顶级pandas.read_csv。这个函数实际上会从一个有效的 URL 中获取数据,然后解析它。

如果您出于任何原因坚持使用pandas.DataFrame.from_csv(),则必须:

  1. 从页面中获取文本。
  2. 将文本或其部分保留为有效的 CSV 文件或类似文件的对象。
  3. 提供文件的路径或类文件的处理程序,作为pandas.DataFrame.from_csv() 的第一个参数。

【讨论】:

  • 提供from_csv的url是完全有效的,它会从页面中获取文本。
  • @TadhgMcDonald-Jensen:我认为您可能会将pandas.DataFrame.from_csv()pandas.read_csv() 混淆。前者(OP 正在尝试使用)不会从 URL 获取数据;只有后者会。不过,我会将其添加到我的答案中。
  • 哦,我想我明白发生了什么。 URL 中必须有一个 CSV,对。嗯,没有。每个球场只有高尔夫球场的名称、地址和网站。我想下载前 10 页 URL 的这三个项目。
  • @ryguy7272:这引出了一个问题,即为什么您首先尝试使用from_csv() 来处理非 CSV 数据。
  • @ryguy7272:如果数据不是 CSV,你不应该尝试使用 read_csv() 方法来解析它。您必须解析页面本身,并将结果存储在DataFrame 中。另外,请确保您这样做没有违反源网站服务条款!
【解决方案2】:

我终于让它工作了。这就是我一直试图做的事情。

import requests
from bs4 import BeautifulSoup

link = "http://www.pga.com/golf-courses/search?page=1&searchbox=Course%20Name&searchbox_zip=ZIP&distance=50&price_range=0&course_type=both&has_events=0"
html = requests.get(link).text

soup = BeautifulSoup(html, "lxml")
res = soup.findAll("div", {"class": "views-field-nothing"})
for r in res:
    print("Address: " + r.find("span", {'class': 'field-content'}).text)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-12
    • 2018-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多