Webscrape数据生成工作簿。关闭()错误。我怎样才能纠正它?

2024-06-10 21:11:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试构建一个webscraper(作为一个辅助项目),它从一个hotelsGoogle Reviews page中提取评论并将它们打印到Excel表中。页面无限滚动,从0开始索引10。为此我一直在使用BeautifulSoup。我的代码如下:

import requests
import xlsxwriter
from bs4 import BeautifulSoup

index = 0
reviewlist = []
while index <= 700:
    url = "https://www.google.com/async/reviewSort?vet=12ahUKEwibi8-45LriAhUXeisKHbROA6sQxyx6BAgBED0..i&ved=2ahUKEwibi8-45LriAhUXeisKHbROA6sQjit6BAgBEHw&rlz=1C1GCEB_enAU817AU817&yv=3&async=feature_id:0x6ad642b40a5fb91f%3A0xd4af4255ed578be2,review_source:All%20reviews,sort_by:qualityScore,start_index:{},is_owner:false,filter_text:,next_page_token:,_pms:s,_fmt:pc".format(index)
    response = requests.get(url)
    soup = BeautifulSoup(response.text, "html.parser")
    tenreviews = soup.findAll("span", {"jsl": "$t t-uvHqeLvCkgA;$x 0;"})
    reviewlist += tenreviews
    index += 10

# Export to Excel sheet
workbook = xlsxwriter.Workbook('doubletreereviews.xlsx')
worksheet = workbook.add_worksheet()

row = 0
for review in reviewlist:
    worksheet.write(row, 0, review)
    row += 1

workbook.close()

在运行我的代码时,它会产生以下TypeError。你知道吗

TypeError: expected string or bytes-like object

我注意到一些元素会正常打印,而其他元素会触发错误。例如,如果在尝试导出到Excel工作表之前,通过添加以下代码将列表替换为特定的单个审阅,则该操作会起作用,生成一个包含A1中单个审阅的Excel工作表。你知道吗

reviewlist = reviewlist[4]

由此,我推断这与清单中的第四条评论没有子代/子代(不确定我是否正确使用了我在BeautifulSoups文档中找到的这个术语)而其他评论没有有关。你知道吗

有谁能解释一下,帮我改正一下吗?你知道吗

如果我的问题、解释或代码有任何问题,请随时告诉我。我在尽可能多地学习!你知道吗


Tags: 代码importurlindexpage评论requestsexcel
1条回答
网友
1楼 · 发布于 2024-06-10 21:11:23

TypeError: expected string or bytes-like object

因为您正试图写入BeautifulSoup Tag对象

worksheet.write(row, 0, review)

其中review<class 'bs4.element.Tag'>实例。你知道吗

review参数必须是stringnumber,而不是Tag类型。你知道吗

相关问题 更多 >