3

我正在尝试从 http://www.pogdesign.co.uk/cat/.

我想获取每个节目的频道和播出时间,但问题是默认情况下它们不会出现。只有在手动配置设置并保存后,才会出现每个节目的频道和播出时间。

据我在检查 Chrome 开发者工具中的“网络”部分后了解,在我单击“保存设置”后实际发生的情况是正在发送一个 POST 请求,其中包含相关的数据参数(例如's_networks':'on'等),然后是一个 GET正在发送请求,以检索带有频道和播放时间的 html 文件。

我尝试使用 python 的requests包和mechanicalsoup包来模拟这个过程(POST 请求,然后是 GET 请求)。

requests:

s = requests.Session()
s.post('http://www.pogdesign.co.uk/cat/', data = {'s_networks':'on'})
s.get('http://www.pogdesign.co.uk/cat/')

mechanicalsoup:

mcs = mechanicalsoup.Browser()
res_post = mcs.post('http://www.pogdesign.co.uk/cat/', data {'s_networks':'on'})
res_get = mcs.get('http://www.pogdesign.co.uk/cat/')

然而,我收到的回复不包含频道和播出时间数据。

我注意到的唯一区别是浏览器的 POST 请求302返回的状态码是 ,而我的 python 请求返回的状态码是200.

4

1 回答 1

3

这是因为cookie存储了用户信息,你可以试试下面的代码

import requests

s = requests.Session()
data = {
    "style": 3,
    "timezone": "GMT",
    "s_numbers": "on",
    "s_epnames": "on",
    "s_airtimes": "on",
    "s_popups": "on",
    "s_wunwatched": "on",
    "s_sortbyname": "on",
    "s_weekstyle": "on",
    "s_24hr": "on",
    "settings": None
}
cookies = { # you can get the cookie info from dev tool
    "CAT_UID":'' ,
    "PHPSESSID":'' ,
    "_ga": '',
    "_gid": '',
    "_gat": ""
}
post = s.post('http://www.pogdesign.co.uk/cat/', data=data, cookies=cookies)
text = post.text
get = s.get('http://www.pogdesign.co.uk/cat/', cookies=cookies)
text1 = get.text
于 2017-07-31T12:01:45.073 回答