обзоры извлечения на основе данных ссылок из данных CSV Python? - PullRequest
0 голосов
/ 05 июля 2018

Я очень новичок в питоне. Я хочу извлечь все отзывы о каждом отеле на основе данных ссылок из CSV-файла с именем hotel_FortWorth.csv, есть 3 столбца: порядок, имя, ссылка. Пример hotel_FortWorth.csv:

     name            link

1   Crockett Hotel            https://www.tripadvisor.com.au/Hotel_Review-g60956-d553469-Reviews-Crockett_Hotel-San_Antonio_Texas.html
2   La Cantera Resort & Spa   https://www.tripadvisor.com.au/Hotel_Review-g60956-d108571-Reviews-La_Cantera_Resort_Spa-San_Antonio_Texas.html
3   .....
4....

Я получил ошибку в thepage = urllib.request.urlopen(url). Кто-нибудь, пожалуйста, помогите мне в этом вопросе. Я высоко ценю это.

data = pd.read_csv('hotel_FortWorth.csv', header = None)
df = data[2]

for url in df:
  print(url)
  thepage = urllib.request.urlopen(url)
  soup = BeautifulSoup(thepage, "html.parser")
  while True:
    a = b = 0
    overallRatingarray = seeAllReviewsarray =  rankarray = hotelarray = ""

    for profile in soup.findAll(attrs={"class": "overview_card"}):
        image = profile.text.replace("\n", "|||||").strip()
        if image.find("rating") > 0:
            counter = image.split("rating", 1)[0].split("|", 1)[1][-4].replace("|", "").strip()
            if len(overallRatingarray) == 0:
                overallRatingarray = [counter]
            else:
                overallRatingarray.append(counter)

Ошибка была:

 Traceback (most recent call last):
 File "E:/LA TROBE SUBJECTS/Python/testing.py", line 33, in <module>
counter = image.split("rating", 1)[0].split("|", 1)[1][-4].replace("|", "").strip()
IndexError: list index out of range

Process finished with exit code 1

1 Ответ

0 голосов
/ 05 июля 2018

Пример requests, см. http://docs.python -requests.org / ru / master / для получения дополнительной информации.

import requests
import pandas as pd
from bs4 import BeautifulSoup

def main():
    data = pd.read_csv("hotel_FortWorth.csv", header=None)
    df = data[2]

    for url in df:
        print(url)
        thepage = requests.get(url).text
        soup = BeautifulSoup(thepage, "html.parser")
        print(soup)
        ...

if __name__ == '__main__':
    main()
...