python爬虫结果无法写入excel

爬虫的时候想把结果写入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()


第三列想写入的内容如下:

img

报错内容如下:

img

将j改为2后,可以成功写入前两列,写出结果如下:

img

all_times 那里错了,你直接把它追加到列表末尾肯定是错的呀,要追加到子列表的末尾:

all_times = soup.find_all("p")
for (index, time) in enumerate(all_times):
    datalist[index].append(time.text)
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632

【以下回答由 GPT 生成】

问题的根本原因是在saveData函数中的写入逻辑出现了问题。在循环写入数据时,直接使用range(0, 50)来遍历,而且并没有获取对应位置的数据。所以导致第三列的数据无法正确写入。可以通过以下步骤来解决该问题:

  1. saveData函数中,修改循环的范围为range(len(datalist)),即使用爬取的数据列表的长度作为循环的范围。
  2. 在循环中使用datalist[i]来获取对应位置的数据,因为列表中每个元素是一个列表,所以需要使用索引来获取其中的数据。
  3. 将获取到的第三列数据写入到Excel文件的对应位置。

修改后的代码如下所示:

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文件中了。如果还有其他问题,可以进一步排查。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^