csv_writer.writeheader()
时间: 2023-06-17 14:07:04 浏览: 495
csv_writer.writeheader() 是 Python 中 csv 模块中的一个函数,它的作用是将 csv 文件的表头写入到文件中。在使用 csv 模块写入 csv 文件时,通常需要先使用 csv.writer 或 csv.DictWriter 创建一个 csv_writer 对象,然后使用该对象的 writerow 或 writerows 方法写入数据。如果需要写入表头,则需要在写入数据之前先调用 writeheader 方法将表头写入文件。
相关问题
import requests import parsel import csv f = open('射击.csv', mode='w', encoding='utf-8-sig', newline='') csv_writer = csv.DictWriter(f, fieldnames=['游戏名字', '游戏地址']) csv_writer.writeheader() for page in range(1, 300): url = 'https://www.4399.com/flash_fl/4_1.htm'.format(page) headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36' } response = requests.get(url=url, headers=headers) response.encoding = response.apparent_encoding selector = parsel.Selector(response.text) lis = selector.css('#classic li') for li in lis: dit ={} data_url = li.css('a::attr(href)').get() new_url = 'http://www.4399.com' + data_url.replace('http://','/') dit['游戏地址'] = new_url title = li.css('img::attr(alt)').get() dit['游戏名字'] = title print(title, new_url) csv_writer.writerow(dit)怎么改成用xpath的
你可以将 `selector = parsel.Selector(response.text)` 改为 `selector = etree.HTML(response.text)`,然后使用 XPath 语法来解析 HTML 页面,下面是修改后的代码:
```
import requests
from lxml import etree
import csv
f = open('射击.csv', mode='w', encoding='utf-8-sig', newline='')
csv_writer = csv.DictWriter(f, fieldnames=['游戏名字', '游戏地址'])
csv_writer.writeheader()
for page in range(1, 300):
url = 'https://www.4399.com/flash_fl/4_1.htm'.format(page)
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'
}
response = requests.get(url=url, headers=headers)
response.encoding = response.apparent_encoding
selector = etree.HTML(response.text)
lis = selector.xpath('//*[@id="classic"]/li')
for li in lis:
dit = {}
data_url = li.xpath('a/@href')[0]
new_url = 'http://www.4399.com' + data_url.replace('http://', '/')
dit['游戏地址'] = new_url
title = li.xpath('a/img/@alt')[0]
dit['游戏名字'] = title
print(title, new_url)
csv_writer.writerow(dit)
f.close()
```
这里使用 XPath 语法,将 `lis` 变量中的值直接改为 `li`,然后在内部使用 XPath 表达式来获取游戏地址和游戏名称。
import requests from lxml import etree import csv headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36' } f = open('4399益智副本2.csv', mode='w', encoding='utf-8-sig', newline='') csv_writer = csv.DictWriter(f, fieldnames=[ '游戏地址','游戏名称']) csv_writer.writeheader() for i in range(1,124): if i == 1: url = 'https://www.4399.com/flash_fl/5_1.htm' html = requests.get(url,headers=headers).content doc = etree.HTML(html) id = doc.xpath('//*[@id="classic"]/li/a/@href') name = doc.xpath('//*[@id="classic"]/li/a/text()') url_1 = 'https://www.4399.com'+id data_list = [] for i in range(len(name)): dit = {} dit['游戏地址'] = url_1[i] dit['游戏名称'] = name[i] data_list.append(dit) csv_writer.writerow(dit) else: url = 'https://www.4399.com/flash_fl/more_5_{}.htm'.format(str(i)) html = requests.get(url,headers=headers).content doc = etree.HTML(html) id = doc.xpath('//*[@id="classic"]/li/a/@href') name = doc.xpath('//*[@id="classic"]/li/a/text()') url_1 = 'https://www.4399.com'+id data_list = [] for i in range(len(name)): dit = {} dit['游戏地址'] = url_1[i] dit['游戏名称'] = name[i] data_list.append(dit) csv_writer.writerow(dit) print(data_list)这个摆错怎么改
你的代码中存在一个问题,即在第15行中,你将 `id` 变量赋值为一个列表,而不是单个链接。因此,你需要将其改为 `id[i]`:
```
url_1 = 'https://www.4399.com' + id[i]
```
另外,你也需要将 `csv_writer.writerow(dit)` 放在 for 循环外面,否则你在每次循环中都会写入一行,导致重复写入。
下面是修改后的代码:
```
import requests
from lxml import etree
import csv
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'
}
f = open('4399益智副本2.csv', mode='w', encoding='utf-8-sig', newline='')
csv_writer = csv.DictWriter(f, fieldnames=['游戏地址', '游戏名称'])
csv_writer.writeheader()
for i in range(1, 124):
if i == 1:
url = 'https://www.4399.com/flash_fl/5_1.htm'
else:
url = 'https://www.4399.com/flash_fl/more_5_{}.htm'.format(str(i))
html = requests.get(url, headers=headers).content
doc = etree.HTML(html)
id = doc.xpath('//*[@id="classic"]/li/a/@href')
name = doc.xpath('//*[@id="classic"]/li/a/text()')
data_list = []
for i in range(len(name)):
dit = {}
dit['游戏地址'] = 'https://www.4399.com' + id[i]
dit['游戏名称'] = name[i]
data_list.append(dit)
csv_writer.writerows(data_list)
print(data_list)
f.close()
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)