Webscrape 数据产生 workbook.close() 错误。我该如何纠正它?
Webscrape data produces a workbook.close() error. How can I correct it?
我正在尝试构建一个网络抓取工具(作为一个副项目),从酒店 Google Reviews page 中提取评论并将它们打印到 Excel sheet。该页面是无限滚动的,索引从 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: expected string or bytes-like object
我注意到有些元素会正常打印,而有些元素会触发错误。例如,如果我在尝试导出到 Excel sheet 之前通过添加以下代码将列表替换为特定的单个评论,它会工作,生成 Excel sheet 在 A1 中有一个评论。
reviewlist = reviewlist[4]
据此,我推断这与以下事实有关:审查列表中的四个没有 child / 后代(不确定我是否正确使用了我发现的这个术语在 BeautifulSoup 的文档中),而其他评论则有。
任何人都可以阐明这一点并帮助我更正它吗?
如果我的问题、解释或代码有任何问题,请随时告诉我。我正在努力学习尽可能多的东西!
TypeError: expected string or bytes-like object
因为您正在尝试编写 BeautifulSoup Tag
对象
worksheet.write(row, 0, review)
其中 review
是 <class 'bs4.element.Tag'>
个实例。
review
参数必须是 string
或 number
,而不是 Tag
类型。
我正在尝试构建一个网络抓取工具(作为一个副项目),从酒店 Google Reviews page 中提取评论并将它们打印到 Excel sheet。该页面是无限滚动的,索引从 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: expected string or bytes-like object
我注意到有些元素会正常打印,而有些元素会触发错误。例如,如果我在尝试导出到 Excel sheet 之前通过添加以下代码将列表替换为特定的单个评论,它会工作,生成 Excel sheet 在 A1 中有一个评论。
reviewlist = reviewlist[4]
据此,我推断这与以下事实有关:审查列表中的四个没有 child / 后代(不确定我是否正确使用了我发现的这个术语在 BeautifulSoup 的文档中),而其他评论则有。
任何人都可以阐明这一点并帮助我更正它吗?
如果我的问题、解释或代码有任何问题,请随时告诉我。我正在努力学习尽可能多的东西!
TypeError: expected string or bytes-like object
因为您正在尝试编写 BeautifulSoup Tag
对象
worksheet.write(row, 0, review)
其中 review
是 <class 'bs4.element.Tag'>
个实例。
review
参数必须是 string
或 number
,而不是 Tag
类型。