为什么报这个错a bytes-like object is required, not 'str'

为什么报这个错a bytes-like object is required, not 'str'

问题描述:

纯新手,学习python和爬虫中

import requests
import re
from lxml import etree
import csv
import time
header = {
    'User Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.101 Safari/537.36',
    'Cache-Control': 'No-Cache'
}
url = 'https://coinmarketcap.com/exchanges/coinbase-exchange/'
resp = requests.get(url, headers=header)

html =etree.HTML(resp.text)
divs = html.xpath('//*[@id="__next"]/div[1]/div[1]/div[2]/div/div[3]/div[1]/div/table/tbody/tr')
for div in divs:
   name1 = div.xpath('./td[2]/a/div/div/p/text()')
   name2 = div.xpath('./td[3]/div/a/text()')
   list_name = (name1,name2)
   with open('data.csv','wb') as f:
       writer = csv.writer(f)
       writer.writerows(list_name)

最后报错:

writer.writerows(list_name)
TypeError: a bytes-like object is required, not 'str'

完全懵逼,求解答。。。

试试这个: 

import requests
import re
from lxml import etree
import csv
import time
header = {
    'User Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.101 Safari/537.36',
    'Cache-Control': 'No-Cache'
}
url = 'https://coinmarketcap.com/exchanges/coinbase-exchange/'
resp = requests.get(url, headers=header)
html =etree.HTML(resp.text)
divs = html.xpath('//*[@id="__next"]/div[1]/div[1]/div[2]/div/div[3]/div[1]/div/table/tbody/tr')
list_name = []
for div in divs:
   name1 = div.xpath('./td[2]/a/div/div/p/text()')
   name2 = div.xpath('./td[3]/div/a/text()')
   list = [name1,name2]
   list_name.append(list)
with open('data.csv','w',newline = '') as f:
   writer = csv.writer(f)
   writer.writerows(list_name)

list_name你这个类型错误,提示你是str

这样改一下代码就可以了。

import requests
import re
from lxml import etree
import csv
import time
header = {
    'User Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.101 Safari/537.36',
    'Cache-Control': 'No-Cache'
}
url = 'https://coinmarketcap.com/exchanges/coinbase-exchange/'
resp = requests.get(url, headers=header)
html = etree.HTML(resp.text)
divs = html.xpath(
    '//*[@id="__next"]/div[1]/div[1]/div[2]/div/div[3]/div[1]/div/table/tbody/tr')

writer=csv.writer(open('data.csv','w',encoding='utf-8',newline=''))
for div in divs:
    name1 = div.xpath('./td[2]/a/div/div/p/text()')
    name2 = div.xpath('./td[3]/div/a/text()')
    list_name = name1+ name2
    writer.writerow(list_name)

如对你有帮助,请点击一下采纳。

改成这样就可以了: 

import requests
import re
from lxml import etree
import csv
import time
header = {
    'User Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.101 Safari/537.36',
    'Cache-Control': 'No-Cache'
}
url = 'https://coinmarketcap.com/exchanges/coinbase-exchange/'
resp = requests.get(url, headers=header)
html =etree.HTML(resp.text)
divs = html.xpath('//*[@id="__next"]/div[1]/div[1]/div[2]/div/div[3]/div[1]/div/table/tbody/tr')
for div in divs:
   name1 = div.xpath('./td[2]/a/div/div/p/text()')
   name2 = div.xpath('./td[3]/div/a/text()')
   list_name = (name1,name2)
   with open('data.csv','w',newline = '') as f:
       writer = csv.writer(f)
       writer.writerows(list_name)

 

 

 

with open('data.csv','w') as f:

有帮助的话请采纳,谢谢 

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632