【发布时间】:2017-06-02 07:34:41
【问题描述】:
我是 Python 编码的新手。 我想将列表“myarrayUrl”中 10 个特定索引处的值附加到另一个空列表“final”。索引的值存储在变量“ind_pos”中。 当我尝试附加这些值时,它们会存储在 csv 文件的同一行中,并且逗号放置在错误的位置。 最终列表中值的存储方式是这样的:
[array(['Hilton Garden Inn Dubai Al Muraqabat',
'Al Deyafa Hotel Apartments',
'Lapita, Dubai Parks and Resorts, Autograph Collection',
'The Baron Hotel Apartments',
'Park Inn by Radisson Hotel Apartments Al Rigga',
'Kempinski Hotel Mall of the Emirates',
'Premier Inn Dubai International Airport Hotel',
'Al Kameelia Hotel Dubai', 'ABC Arabian Suites',
'The Ritz-Carlton Residences, Dubai International Financial Centre'],
dtype='<U79')]
它们在 csv 文件中的显示方式是(同一行中的所有 10 个名称):
Abidos Hotel Apartment - Al BarshaMarriott Executive Apartments Dubai, Green CommunityPullman Jumeirah Lakes Towers Hotel & ResidenceRamee Guestline Hotel Apartment 3The Ritz-Carlton Residences, Dubai International Financial CentreLapita, Dubai Parks and Resorts, Autograph CollectionAl Diar Hotel Apartments - Al BarshaDoubleTree by Hilton Hotel & Residences Dubai - Al BarshaJW Marriott Marquis Hotel DubaiHabtoor Grand Resort, Autograph Collection, A Marriott Luxury & Lifestyle Hotel
下面是我的代码:
import requests
import re
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.poolmanager import PoolManager
import ssl
import csv
import numpy as np
from bs4 import BeautifulSoup
def connect(self):
# Add certificate verification
sock = socket.create_connection((self.host, self.port), self.timeout)
# Wrap socket using verification with the root certs in
# trusted_root_certs
self.sock = ssl_wrap_socket(sock, self.key_file, self.cert_file,
cert_reqs=self.cert_reqs,
ca_certs=self.ca_certs,
server_hostname=self.host,
ssl_version=ssl.PROTOCOL_TLSv1)
offset = 0
url = 'https://www.tripadvisor.com/Hotels-g295424-oa' + str(offset) + '-Dubai_Emirate_of_Dubai-Hotels.html#EATERY_LIST_CONTENTS'
index_pages = ('http://www.tripadvisor.com/Hotels-g295424-oa{}-Dubai_Emirate_of_Dubai-Hotels.html#ACCOM_OVERVIEW'.format(i) for i in range(0, 540, 30))
urls = []
r = requests.get(url)
soup = BeautifulSoup(r.text, "html.parser")
for link in soup.find_all('a', {'last'}):
page_number = link.get('data-page-number')
last_offset = int(page_number) * 30
print('last offset:', last_offset)
i=0
myList=[]
myUrl=[]
final=[]
for offset in range(0, last_offset, 30):
print('--- page offset:', offset, '---')
url = 'https://www.tripadvisor.com/Hotels-g295424-oa' + str(offset) + '-Dubai_Emirate_of_Dubai-Hotels.html#EATERY_LIST_CONTENTS'
r = requests.get(url)
soup = BeautifulSoup(r.text, "html.parser")
for link in soup.find_all('a', {'property_title'}):
iurl='https://www.tripadvisor.com/' + link.get('href')
page = requests.get(iurl).text
c=page.find("pool")
myList.append(c)
print (link.text)
myUrl.append(link.text)
print (page.find("pool") )
myarray = np.asarray(myList)
myarrayUrl = np.asarray(myUrl)
ind_pos= np.argsort(myarray)[-10:]
print (myarrayUrl[ind_pos])
myarrayUrl.tolist();
#for i in ind_pos:
# T.append(L[i])
final.append(myarrayUrl[ind_pos])
print (final)
with open ('HotelReviewData.csv','w') as file:
writer=csv.writer(file)
for row in final:
writer.writerow(row)
如何在最终列表中附加值,以便它们存储在 csv 文件的不同行中?
【问题讨论】:
标签: python csv python-3.5