Python web抓取到csv

Python web抓取到csv,python,web-scraping,rows,export-to-csv,Python,Web Scraping,Rows,Export To Csv,我做了一个网页抓取,我得到了一个我想写进CSV的表格 当我尝试时,我收到以下信息: “回溯(最近一次呼叫最后一次): 文件“C:/Python27/megoldas3.py”,第27行,在 file.write(字节(头,encoding=“ascii”,errors=“ignore”))类型错误: str()最多接受1个参数(给定3个参数)” 这个代码怎么了?我使用Python 2.7.13 导入urllib2 从bs4导入BeautifulSoup 导入csv 导入操作系统 out=打开(“

我做了一个网页抓取,我得到了一个我想写进CSV的表格

当我尝试时,我收到以下信息:

“回溯(最近一次呼叫最后一次):

文件“C:/Python27/megoldas3.py”,第27行,在
file.write(字节(头,encoding=“ascii”,errors=“ignore”))类型错误:
str()最多接受1个参数(给定3个参数)”

这个代码怎么了?我使用Python 2.7.13

导入urllib2
从bs4导入BeautifulSoup
导入csv
导入操作系统
out=打开(“proba.csv”、“rb”)
数据=csv.reader(输出)
def制作汤(url):
thepage=urlib2.urlopen(url)
soupdata=BeautifulSoup(页面“html.parser”)
返回soupdata
maindatatable=“”
汤=做汤https://www.mnb.hu/arfolyamok")
记录在soup.findAll('tr'):
datatable=“”
对于record.findAll('td')中的数据:
datatable=datatable+“,”+data.text
maindatatable=maindatatable+“\n”+datatable[1:]
header=“Penznem、Devzanev、Egyseg、Penznemforintban”
打印主数据表
文件=打开(os.path.expanduser(“proba.csv”),“wb”)
写入(字节(头,encoding=“ascii”,errors=“ignore”))
写入(字节(maindatable,encoding=“ascii”,errors=“ignore”))

你把父母放错地方了
编码和
错误是
文件的参数。write()
不是
字节()


你把帕伦斯放错地方了
编码和
错误是
文件的参数。write()
不是
字节()


在尝试编写字符串之前对其进行编码如何

utf8_str = maindatatable.encode('utf8')
file.write(utf8_str)

另外,不要忘记file.close()

在尝试写入字符串之前对其进行编码如何

utf8_str = maindatatable.encode('utf8')
file.write(utf8_str)

另外,别忘了使用file.close()

我想这对您很有用。只需从字节中删除
encoding=“ascii”,errors=“ignore”

# import re
# data = [['revenue', 'margins'], ['revenue', 'liquidity'], ['revenue', 'ratio'], ['revenue', 'pricing'], ['revenue', 'assets'], ['revenue', 'recent trends']]
# with open('a.txt') as f:
#   txt = f.read()
#   for d in data:
#       c1 = re.findall(d[0],txt)
#       c2 = re.findall(d[1],txt)
#       if c1 and c2:
#           print {c1[0]:len(c1),c2[0]:len(c2)}


import urllib2
from bs4 import BeautifulSoup
import csv
import os

out=open("proba.csv","rb")
data=csv.reader(out)

def make_soup(url):
    thepage = urllib2.urlopen(url)
    soupdata = BeautifulSoup(thepage, "html.parser")
    return soupdata

maindatatable=""
soup = make_soup("https://www.mnb.hu/arfolyamok")

for record in soup.findAll('tr'):
    datatable=""
    for data in record.findAll('td'):
        datatable=datatable+","+data.text
    maindatatable = maindatatable + "\n" + datatable[1:]

header = "Penznem,Devizanev,Egyseg,Penznemforintban"
print maindatatable

file = open(os.path.expanduser("proba.csv"),"wb")
file.write(header.encode('utf-8').strip())
file.write(maindatatable.encode('utf-8').strip())

我想这对你有用。只需从字节中删除
encoding=“ascii”,errors=“ignore”

# import re
# data = [['revenue', 'margins'], ['revenue', 'liquidity'], ['revenue', 'ratio'], ['revenue', 'pricing'], ['revenue', 'assets'], ['revenue', 'recent trends']]
# with open('a.txt') as f:
#   txt = f.read()
#   for d in data:
#       c1 = re.findall(d[0],txt)
#       c2 = re.findall(d[1],txt)
#       if c1 and c2:
#           print {c1[0]:len(c1),c2[0]:len(c2)}


import urllib2
from bs4 import BeautifulSoup
import csv
import os

out=open("proba.csv","rb")
data=csv.reader(out)

def make_soup(url):
    thepage = urllib2.urlopen(url)
    soupdata = BeautifulSoup(thepage, "html.parser")
    return soupdata

maindatatable=""
soup = make_soup("https://www.mnb.hu/arfolyamok")

for record in soup.findAll('tr'):
    datatable=""
    for data in record.findAll('td'):
        datatable=datatable+","+data.text
    maindatatable = maindatatable + "\n" + datatable[1:]

header = "Penznem,Devizanev,Egyseg,Penznemforintban"
print maindatatable

file = open(os.path.expanduser("proba.csv"),"wb")
file.write(header.encode('utf-8').strip())
file.write(maindatatable.encode('utf-8').strip())
这应该行得通

file.write(bytes(header.encode('ascii','ignore')))
file.write(bytes(maindatatable.encode('ascii','ignore')))
这应该行得通

file.write(bytes(header.encode('ascii','ignore')))
file.write(bytes(maindatatable.encode('ascii','ignore')))


bytes
将只使用一个参数我理解错误消息,但我不知道如何更正它。
encoding=“ascii”,errors=“ignore”
是属性如果write函数不是字节,我在下面发布了答案
bytes
将只使用一个参数我理解错误消息,但是我不知道该怎么纠正它。
encoding=“ascii”,errors=“ignore”
是属性,如果write函数不是字节,我在下面贴了答案。我试过了,但它不起作用:“回溯(最近一次调用):File.write(bytes(header),encoding=“ascii”,errors=“ignore”)第27行,File.C:/Python27/megoldas3.py文件TypeError:write()不接受关键字参数“将
编码
错误
参数转移到调用
打开
。我尝试过,但不起作用:“回溯(最近一次调用):File.write中的第27行文件“C:/Python27/megoldas3.py”(bytes(header),encoding=“ascii”,errors=“ignore”)TypeError:write()不接受关键字参数“将
编码
错误
参数转移到调用
打开
。我尝试使用字节(标头),但无效:\“回溯(最近一次调用):File.write(bytes(maindatatable))中的File“C:/Python27/megoldas3.py”,第28行UnicodeEncodeError:“ascii”编解码器无法对位置9中的字符u'\xe1'进行编码:序号不在范围(128)“我尝试使用字节(标头),但无效:\”回溯(最近一次调用):文件“C:/Python27/megoldas3.py”,第28行,在File.write(字节(maindatatable))UnicodeEncodeError:“ascii”编解码器无法对位置9中的字符u'\xe1'进行编码:序号不在范围(128)“这是可行的,但请查看excel文件。有3个空行,并且存在一些格式问题+未交付:S那么您可能需要utf16用于HU。因此,您的代码应该简单地将utf8切换为utf16。utf16_str=maindatable.encode('utf16')啊,你很酷,它的工作^^^你能回答我的第一个问题吗?为什么我会得到3个空行,为什么不把它们放到不同的列中呢?1到4之间的空行是存在的,因为你解析的页面有2个空tr。7处的空行也是如此。在我的档案中,所有的货币都已交付。Excel将“,”解释为分隔符并在另一列中列出分数可能会有问题,但这是读卡器的问题,而不是您编写文件的方式。作为预防措施,您可能希望将昏迷字符转换为圆点。这就是我的输出,啊,这是Excel的问题?我必须在Excel设置中设置吗?但如果我用“,”符号分开,我会得到5列,但我有4列!最后两列是值,例如Euro-307,82它是工作的,但请查看excel文件。有3个空行,并且存在一些格式问题+未交付:S那么您可能需要utf16用于HU。因此,您的代码应该简单地将utf8切换为utf16。utf16_str=maindatable.encode('utf16')啊,你很酷,它的工作^^^你能回答我的第一个问题吗?为什么我会得到3个空行,为什么不把它们放到不同的列中呢?1到4之间的空行是存在的,因为你解析的页面有2个空tr。7处的空行也是如此。在我的档案中,所有的货币都已交付。Excel将“,”解释为分隔符并在另一列中列出分数可能会有问题,但这是读卡器的问题,而不是您编写文件的方式。作为预防措施,您可能希望将昏迷字符转换为圆点。这就是我的输出,啊,这是Excel的问题?我必须在Excel设置中设置吗?但如果我用“,”符号分开,我会得到5列,但我有4列!最后两列是值,例如Euro-307,82