在给定某些url更改规则的情况下,python如何每天自动抓取



你好,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()
              }

最新更新