Я новичок в bs4 и ищу способ извлечь текст со страницы, затем добавить его в файл Excel, после чего перейти на следующую страницу и, наконец, добавить новый текст в уже созданный файл Excel,Это мой результат
from selenium import webdriver
import scrapy
import datetime
import selenium
from bs4 import BeautifulSoup
import pandas as pd
geckodriver = "#here lies the path#"
options = webdriver.FirefoxOptions()
options.add_argument('-headless')
driver = webdriver.Firefox(executable_path=geckodriver,
firefox_options=options)
link= "a result page from booking such as [this][1]"
driver.get(link)
pageSource = driver.page_source
bs = BeautifulSoup(pageSource, 'html.parser')
HotelNames = bs.select('.sr-hotel__name')
HotelScores = bs.select('.review-score-badge')
HotelPrices = prezziHotel = bs.findAll("b")
Список похож на этот отпечаток
print(HotelNames)
[<span class="sr-hotel__name " data-et-click="
customGoal:NAFLWCAHUJMDDWEYcZbBJOTXNORe:1
">
Residence Adam's Apple
</span>, <span class="sr-hotel__name " data-et-click="
customGoal:NAFLWCAHUJMDDWEYcZbBJOTXNORe:1
">
La Luna
</span>, <span class="sr-hotel__name " data-et-click="
">
Hotel Astor
</span>,
Использование
HotelNames = HotelNames.get_text()
или извлечение дает следующую ошибку
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-33-01e95302c548> in <module>()
----> 1 nomeHotel = nomiHotel.getText()
AttributeError: 'list' object has no attribute 'get_text'
Лично я не знаю, что делать.Единственный результат, у меня есть списки с тегом или.Если бы я мог взять только нужный мне текст (название всего отеля, рейтинг всех отелей и указана цена), я мог бы добавить его в файл Excel.
Для части Excel:Я собираюсь сделать следующий код
workbook = xlsxwriter.Workbook('Hotels.xlsx')
worksheet = workbook.add_worksheet()
rowName = 1
rowScore=1
rowPrice=1
col = 0
for name in (HotelNames):
worksheet.write(rowName, 0, name)
rowName += 1
for score in (HotelScores):
worksheet.write(rowScore, 0, name)
rowScore += 1
for price in (HotelPrices):
worksheet.write(rowPrice, 0, name)
rowPrice += 1
Спасибо за помощь!
Первая часть проблемы решена благодаря помощи Сартак Неги и Андерссон использовался и работал следующий код
i=0
HotelListNameWithoutTags = []
for name in HotelNames:
HotelListNameWithoutTags.append(HotelNames[i].get_text())
i=i+1
print(HotelListNameWithoutTags)
for name in HotelListNameWithoutTags:
print(name)
, но работал и этот другой код
HotelNames = [name.get_text() for name in HotelNames]
Теперь есть вторая незначительная проблема с этим извлечением,Результат в обоих случаях аналогичен следующим выводам:
Hotel Atlas
Residence Adam's Apple
это происходит, когда я печатаю одну строку.Когда я печатаю HotelListNameWithoutTags, появляется следующий вывод:
['\nHotel Atlas\n', "\nResidence Adam's Apple\n",
Мартин Эванс помог дать следующий код
HotelNames = [name.replace ('\ n', '') для имени в HotelNames]
Теперь у меня есть последняя часть этого проекта.Я) должен изменить страницу, используя панель навигации на веб-сайте, которая сформирована тегом с href и текстом.Проблема, которая очень «вложена»
<div class="bui-pagination results-paging">
<div class="bui-pagination__nav">
<ul class="bui-pagination__list">
<li class="bui-pagination__pages">
<ul class="bui-pagination__list">
<li class="bui-pagination__item bui-pagination__item--active sr_pagination_item current">
<a class="bui-pagination__link sr_pagination_link" href="link">1</a>
</closing tags>
Как мне взять href или текст в теге (Использование имени класса с select не работает вообще. Их на странице многопоэтому я тоже не могу использовать метод find_All)