爬虫的时候想把结果写入excel,写入前两列都没有问题,但是写入第三列的时候就会报错,这是什么原因呢?
爬虫代码如下:
import requests
from bs4 import BeautifulSoup
import xlwt
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/115.0.1901.188"
}
def main():
keyword = "可再生能源"
datalist = []
for start_num in range(1, 3):
data = searchlaw(keyword, start_num)
datalist.extend(data)
for item in datalist:
print(item)
savepath = "爬虫练习.xls"
saveData(datalist, savepath)
def searchlaw(keyword, start_num):
response = requests.get \
(f"http://law1.law-star.com/search?kw={keyword}&dbt=chl&dbt=lar&ps=50&sort=imp&p={start_num}", headers=headers)
html = response.text
soup = BeautifulSoup(html, "lxml")
all_titles = soup.findAll("h2")
datalist = []
for title in all_titles:
data = []
try:
title_name = title.find("a")["title"]
link = title.find("a")["href"]
data.append(title_name)
data.append(link)
datalist.append(data)
except:
continue
all_times = soup.find_all("p")
for time in all_times:
datalist.append(time.text)
return datalist
def saveData(datalist, savepath):
print("save....")
book = xlwt.Workbook(encoding="utf-8", style_compression=0)
sheet = book.add_sheet('爬虫练习', cell_overwrite_ok=True)
col = ("文件名", "链接","发布时间")
for i in range(0, 3):
sheet.write(0, i, col[i])
for i in range(0,50):
print("第%d条" % (i + 1))
data = datalist[i]
for j in range(0, 3):
sheet.write(i + 1, j, data[j])
book.save('爬虫练习.xls')
if __name__ == "__main__":
main()
第三列想写入的内容如下:
报错内容如下:
将j改为2后,可以成功写入前两列,写出结果如下:
all_times 那里错了,你直接把它追加到列表末尾肯定是错的呀,要追加到子列表的末尾:
all_times = soup.find_all("p")
for (index, time) in enumerate(all_times):
datalist[index].append(time.text)
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!【以下回答由 GPT 生成】
问题的根本原因是在saveData
函数中的写入逻辑出现了问题。在循环写入数据时,直接使用range(0, 50)
来遍历,而且并没有获取对应位置的数据。所以导致第三列的数据无法正确写入。可以通过以下步骤来解决该问题:
saveData
函数中,修改循环的范围为range(len(datalist))
,即使用爬取的数据列表的长度作为循环的范围。datalist[i]
来获取对应位置的数据,因为列表中每个元素是一个列表,所以需要使用索引来获取其中的数据。修改后的代码如下所示:
def saveData(datalist, savepath):
print("save....")
book = xlwt.Workbook(encoding="utf-8", style_compression=0)
sheet = book.add_sheet('爬虫练习', cell_overwrite_ok=True)
col = ("文件名", "链接", "发布时间")
for i in range(0, 3):
sheet.write(0, i, col[i])
for i in range(len(datalist)):
print("第%d条" % (i + 1))
sheet.write(i + 1, 0, datalist[i][0])
sheet.write(i + 1, 1, datalist[i][1])
sheet.write(i + 1, 2, datalist[i][2]) # 将第三列数据写入到Excel文件的对应位置
book.save(savepath)
这样修改之后,应该就能够正确地将第三列数据写入到Excel文件中了。如果还有其他问题,可以进一步排查。
【相关推荐】