Данные Webscrape приводят к ошибке workbook.close (). Как я могу это исправить? - PullRequest
1 голос
/ 27 мая 2019

Я пытаюсь создать веб-браузер (как побочный проект), который извлекает отзывы из отелей Страница отзывов Google и печатает их на листе Excel. Страница бесконечно прокручивается и индексируется на 10, начиная с 0. Я использовал 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, это работает, создавая лист Excel с одной рецензией в A1.

reviewlist = reviewlist[4]

Из этого я сделал вывод, что это как-то связано с тем фактом, что в проверке четырех списков нет дочернего элемента / потомка (не уверен, правильно ли я использую этот термин, который я нашел в документации BeautifulSoups), в то время как другие Отзывы делают.

Кто-нибудь сможет пролить свет на это и помочь мне исправить это?

Если есть какие-либо проблемы с моим вопросом, объяснением или кодом, не стесняйтесь, дайте мне знать. Я пытаюсь узнать как можно больше!

1 Ответ

1 голос
/ 27 мая 2019

TypeError: ожидаемая строка или байтовоподобный объект

, потому что вы пытаетесь написать BeautifulSoup Tag object

worksheet.write(row, 0, review)

, где review равно <class 'bs4.element.Tag'> instance.

review аргумент должен иметь тип string или number, а не Tag.

...