尝试循环访问URL并将内容作为数据框保存到文本文件中

时间:2016-03-19 20:13:27

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

我认为这段代码非常接近正确,但有些东西正在抛弃它。我正在尝试遍历10个网址并将每个网址的内容下载到文本文件中,并确保所有内容都按照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行提到了一个问题。

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

2 个答案:

答案 0 :(得分:1)

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

您正在为其提供网址。

您似乎想要使用其他功能:顶级pandas.read_csv。此函数实际上将从有效URL中获取您的数据,然后解析它。

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

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

答案 1 :(得分:1)

我终于开始工作了。这就是我一直想做的事情。

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)