bs4 Извлеките текст из списка <tags>как <span>или <b>и сохраните его в Excel - PullRequest
0 голосов
/ 12 сентября 2018

Я новичок в 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)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...