你好,python学习的新人。销售人员经常出差,想在酒店预订中节省一些钱,所以我在某些日子用python刮取某些酒店供个人使用。
我可以用python抓取一个特定的网页,但我在进行串行搜索时遇到了麻烦。
单个网页刮片如下:
import requests
from bs4 import BeautifulSoup
url ="http://hotelname.com/arrivalDate=05%2F23%2F2016**&departureDate=05%2F24%2F2016" #means arrive on May23 and leaves on May
wb_data = requests.get(url)
soup = BeautifulSoup(wb_data.text,'lxml')
names = soup.select('.PropertyName')
prices = soup.select('.RateSection ')
for name,price in zip(names,prices):
data = {
"name":name.get_text(),
"price":price.get_text()
}
print (data)
通过这样做,我可以得到当天酒店的价格。但我想在更长的时间内(比如15天)知道价格,这样我就可以安排旅行并节省一些钱。问题是如何使搜索自动循环?
例如。酒店名称('')价格(200美元)5月1日入住(CI)和5月2日退房(CO)
酒店名称('')价格(150美元)5月2日CI 5月3日CO
酒店名称('')价格(170美元)5月30日CI 5月31日CO
希望我把我的意图说清楚。有人能帮助指导我应该如何实现这种自动搜索吗?手动更改url中的日期工作量太大。感谢
您可以使用日期时间库来获取日期,并在循环中一次增加一天,持续n天:
import requests
from bs4 import BeautifulSoup
from datetime import datetime, timedelta
def n_booking(n):
# start tomorrow
bk = (datetime.now() + timedelta(days=1))
# check next n days
for i in range(n):
mon, day, year = bk.month, bk.day, bk.year
# go to next day
bk = (datetime.now() + timedelta(days=1))
d_mon, d_day, d_year = bk.month, bk.day, bk.year
url ="http://hotelname.com/arrivalDate=d{mon}%2F{day}%2F{year}**&departureDate={d_mon}%2F{d_day}%2F{d_year}"
.format(mon=mon, day=day, year=year, d_day=d_day, d_mon=d_mon,d_year=d_year)
wb_data = requests.get(url)
soup = BeautifulSoup(wb_data.text,'lxml')
names = soup.select('.PropertyName')
prices = soup.select('.RateSection ')
for name,price in zip(names,prices):
yield {
"name":name.get_text(),
"price":price.get_text()
}