【发布时间】:2017-04-23 21:57:21
【问题描述】:
我的代码显示酒店的第一页。为什么没有显示更多?
import csv
import requests
from bs4 import BeautifulSoup
hotels=[]
i=0
url0 = 'https://www.tripadvisor.com/Hotels-g295424-Dubai_Emirate_of_Dubai- Hotels.html#EATERY_LIST_CONTENTS'
r = requests.get(url0)
data = r.text
soup = BeautifulSoup(r.text, "html.parser")with open('hotels_Data.csv','wb') as file:
for link in soup.findAll('a', {'property_title'}):
print('https://www.tripadvisor.com/Hotels-g295424-' + link.get('href'))
print(link.string)
for i in range(20):
while int(i) <= (20):
i = str(i)
url1 = 'https://www.tripadvisor.com/Hotels-g295424-oa' + i + '- Dubai_Emirate_of_Dubai-Hotels.html#EATERY_LIST_CONTENTS'
r1 = requests.get(url1)
data1 = r1.text
soup1 = BeautifulSoup(data1, "html.parser")
for link in soup1.findAll('a', {'property_title','price'}):
print('https://www.tripadvisor.com/Hotels-g294212-' + link.get('href'))
print(link.string)
for link in soup.select("a.reference.internal"):
url1 = link["href"]
absolute_url = urljoin(base_url, url1)
print(url1, absolute_url)
writer = csv.writer(file)
for row in hotels:
writer.writerow([s.encode("utf-8") for s in row])
break
【问题讨论】:
-
当您询问 TripAdvisor 是否允许您这样做时,他们不是通过 API 为您提供访问权限吗?
-
不,他们只为有业务的人提供API(供官方使用).....我是学生,我只需要一些数据用于我的项目..
-
您可以尝试使用 Selenium 之类的工具在页面上找到“下一页”按钮。比 BS 需要更长的时间,因为它实际上会打开一个浏览器窗口进行交互,但可以快速解决您的问题
-
门户使用值 30、60、90、120 等而不是 1、2、3 作为下一页编号 - 因为页面上有 30 个优惠。
-
@furas 你能告诉我怎么做吗?
标签: python csv web-scraping beautifulsoup python-3.5