Wikipedia表的Python抓取,然后导出到csv

Wikipedia表的Python抓取,然后导出到csv,python,web-scraping,beautifulsoup,python-requests,export-to-csv,Python,Web Scraping,Beautifulsoup,Python Requests,Export To Csv,我已经按照图里奥利亚刮表,然后将数据导出到一个csv文件。当我试图执行文件时,我通过PyCharm得到一个错误 “回溯(最近一次呼叫最后一次): 文件“I:/scrap/MediumCode.py”,第1行,在 导入请求 ModuleNotFoundError:没有名为“requests”的模块 我还假设代码及其逻辑中还存在其他错误,但这是我遇到的第一个问题,如果不理解为什么不能识别该库,我将无法进一步深入 已成功运行pip安装请求 from urllib.request import urlo

我已经按照图里奥利亚刮表,然后将数据导出到一个csv文件。当我试图执行文件时,我通过PyCharm得到一个错误

“回溯(最近一次呼叫最后一次): 文件“I:/scrap/MediumCode.py”,第1行,在 导入请求 ModuleNotFoundError:没有名为“requests”的模块

我还假设代码及其逻辑中还存在其他错误,但这是我遇到的第一个问题,如果不理解为什么不能识别该库,我将无法进一步深入

已成功运行pip安装请求

from urllib.request import urlopen as uReq
from bs4 import BeautifulSoup as soup

my_url = 'https://en.wikipedia.org/wiki/Public_holidays_in_Switzerland'

uClient = uReq(my_url)
page_html = uClient.read()
uClient.close()

page_soup = soup(page_html, "html.parser")

containers = page_soup.findAll("table", {"class":"wikitable"})

filename = "holidays.csv"
f = open(filename, "w")

headers = "holiday, holiday_date"

f.write(headers)

for container in containers:
    holiday = container.table.tbody.tr.td.a["title"]

    name_container = container.findAll("a", {"class":"title"})
    holiday_name = name_container[0].text

    date_container = container.findAll("td")
    date = date_container[0].text.strip()

    print("holiday: " + brand)
    print("holiday_name: " + holiday_name)
    print("date: " + date)

    f.write(holiday + "," + holiday_name.replace(",", "|") + "," + date + "\n")

    f.close()

使用您的代码,我可以很好地获得
page\u html
。因此,由于某些原因,您的系统不喜欢
urllib.request
。请注意,
请求
请求
并不完全相同。据我所知,
请求
构建在
urlib3
之上,而
urlib.request
位于标准库中,尽管它们都指向引擎盖下的一些常见内容

这个代码对你有用吗

from urllib import request

my_url = 'https://en.wikipedia.org/wiki/Public_holidays_in_Switzerland'
p = request.urlopen(my_url)
print(p.read())

使用
pandas

  • )-将HTML表格读入DataFrame对象列表
  • -将对象写入逗号分隔值(csv)文件

安装熊猫库

如果
请求
库仍然没有在系统中抛出错误,请尝试以下操作:

from urllib.request import urlopen as uReq
import pandas as pd

url = 'https://en.wikipedia.org/wiki/Public_holidays_in_Switzerland'
response = uReq(url)
tables = pd.read_html(response.read())
#select only holiday column
select_table_column = ["Holiday"]
'''
    #or select multiple columns 
    select_table_column = ["Holiday","Date"]

'''
# filter table data by selected columns
holiday = tables[0][select_table_column]

# # write holiday table data into `holiday_data` csv file and set csv header
holiday.to_csv("holiday_data.csv",header=True)

在第一行添加导入请求时出现相同的错误尝试在一个完全独立的文件中运行行
导入请求
,查看是否出现相同的错误。没有相同错误的输出从PyCharm切换到Anaconda/Spyder,是的,它可以工作。在Spyder IDE中运行上面的代码现在会抛出这些错误回溯(最近一次调用):runfile('C:/Users/Riche10/.Spyder-py3/Test_Scraper.py',wdir='C:/Users/Riche10/.Spyder-py3')中第1行的文件“”,请求仍然会在发布的第一个代码中抛出错误。您发布的第二段代码现在没有出现任何错误!谢谢现在,如果我只想获取第一个select列,我将如何迭代它们?您能将这两部分代码合并在一起吗?我正在用更新的代码替换表[0]。到_csv(“holiday_data.csv”),并且issues@ERich答案已更新,请检查。
pip3 install pandas
from urllib.request import urlopen as uReq
import pandas as pd

url = 'https://en.wikipedia.org/wiki/Public_holidays_in_Switzerland'
response = uReq(url)
tables = pd.read_html(response.read())
#select only holiday column
select_table_column = ["Holiday"]
'''
    #or select multiple columns 
    select_table_column = ["Holiday","Date"]

'''
# filter table data by selected columns
holiday = tables[0][select_table_column]

# # write holiday table data into `holiday_data` csv file and set csv header
holiday.to_csv("holiday_data.csv",header=True)