更新此查询时,为什么页面响应不会更改?

时间:2017-04-13 22:26:38

标签: python header beautifulsoup python-requests response

我无法在网站https://www.booking.com的网页中可靠地提取变量(属性计数)。

搜索巴西时,显示29,454个房产。

但是当尝试将查询更新为其他国家/地区时,它会列出相同的数字(加或减1)。我不确定这是否与标题或查询有关。

也许有一种更简单的方法来提取信息

巴西应拥有29,000多处房产,乌拉圭应拥有1,629房产

以下代码的运行方式与在Booking.com

中搜索国家/地区的名称相同
import requests
from bs4 import BeautifulSoup

from requests.packages.urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

url = "https://www.booking.com/searchresults.en-gb.html"

countries = [u'Brazil', u'Uruguay']

for country in countries:

    querystring = {"label": "gen173nr-1DCAEoggJCAlhYSDNiBW5vcmVmcgV1c19vcogBAZgBMbgBB8gBDdgBA-gBAfgBApICAXmoAgM",
                   "lang": "en-gb", "sid": "5f9b0b3af27a0a0b48017c6c387d8224", "track_lsso": "2", "sb": "1",
                   "src": country, "src_elem": "sb",
                   "ss": country.replace(' ', '+'), "ssne": country, "ssne_untouched": country, "dest_id": "30", "dest_type": "country",
                   "checkin_monthday": "", "checkin_month": "", "checkin_year": "", "checkout_monthday": "",
                   "checkout_month": "", "checkout_year": "", "room1": "A", "no_rooms": "1", "group_adults": "1",
                   "group_children": "0"}

    headers = {
        'upgrade-insecure-requests': "1",
        'user-agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36",
        'accept': "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
        'content-encoding': "br",
        'accept-language': "en-US,en;q=0.8",
        'content-type': "text/html;charset=UTF-8",
        'cache-control': "no-cache",
        'postman-token': "124b1e3b-c4de-9ab0-162f-003770797f9f"
    }

    response = BeautifulSoup(requests.request("GET", url, headers=headers, params=querystring, verify=False).content,
                             "html.parser")

    totalPropCount = response.select('h1[class="sorth1"]')[0].text

    print totalPropCount.split(': ')[1], ' for ', country

1 个答案:

答案 0 :(得分:1)

您的问题是您正在对dest_id进行硬编码。 30 dest_id只指向巴西!

您可以使用以下方法进行验证:

querystring = querystring = {"src": country,
               "dest_id": "225", "dest_type": "country",
               }

请注意,我删除了很多内容以简化,但我最重要的是将dest_id更改为225. 225是Uraguay的dest_id,而dest_id 30(一个)你有硬编码)是巴西。

每次您提出要求时,您都要求提供巴西信息,因此您获得的号码相同!将此querystring插入,您应该看到Uraguay的信息。

我不确定自动填充它的最佳方法是什么,也许只需查看您感兴趣的代码并将其保存在dict中?这样,每次循环都会得到正确的dest_id。

事实上,querystring中插入country(ssne,src,ssne_untouched)的其他字符串都没有归结为最终结果。您可以使用我示例中的3个字段来提取Uraguays信息。