Webscrape数据产生一个workbook.close()错误。我该如何纠正?

时间:2019-05-27 06:52:59

标签: python web-scraping beautifulsoup xlsxwriter

我正在尝试构建一个网络草稿(作为辅助项目),以将评论从酒店Google 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文档中找到的正确术语),而其他评论。

任何人都可以对此有所了解并帮助我纠正它吗?

如果我的问题,解释或代码有任何问题,请随时告诉我。我正在努力学习尽可能多的东西!

1 个答案:

答案 0 :(得分:1)

  

TypeError:预期的字符串或类似字节的对象

因为您要编写BeautifulSoup Tag对象

worksheet.write(row, 0, review)

其中review<class 'bs4.element.Tag'>实例。

review参数必须是stringnumber类型,而不是Tag类型。