我认为这段代码非常接近正确,但有些东西正在抛弃它。我正在尝试遍历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行提到了一个问题。
有人可以帮我推动这项工作吗?
答案 0 :(得分:1)
pandas.DataFrame.from_csv()
接受第一个参数,它是路径或类似文件的句柄,其中任何一个应该指向有效的CSV文件。
您正在为其提供网址。
您似乎想要使用其他功能:顶级pandas.read_csv
。此函数实际上将从有效URL中获取您的数据,然后解析它。
如果您因任何原因坚持使用pandas.DataFrame.from_csv()
,则必须:
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)