使用python请求访问页面时出现问题

时间:2018-03-06 21:37:34

标签: python python-requests

我正在尝试为ML分类项目提取股票的部门。如果我转到以下页面:

https://www.six-swiss-exchange.com/shares/security_info_en.html?id=CH0012221716CHF4

我(在屏幕上)获得了有关此股票的一些信息(它改变了,使用id代码 - 我只选择列表中的第一个)。但是,没有任何信息可用于常规请求。 (html页面主要包含javascript函数)

我需要的是“股票详情”标签(页面底部的ICB Supersector)。定期请求再也没有任何内容可用。我查看了当单击此选项卡时所发生的情况,并且所需的请求位于URL:

http://www.six-swiss-exchange.com/shares/info_details_en.html?id=CH0210483332CHF4&portalSegment=EQ&dojo.preventCache=1520360103852 HTTP / 1.1

但是,如果我直接使用此URL,我会从请求中收到403错误,但是从浏览器开始工作。我通常对这类事情没有任何问题,但在这种情况下,我是否必须提交cookie或任何其他信息才能访问该页面 - 无需登录,可以从任何浏览器轻松访问。

我在想1)向有效的网址发出第一个请求,2)存储他们发送给你的cookie(我不知道该怎么做)和3)向所需网址发出第二个请求。这会有用吗?

我尝试使用request.session(),但我不确定这是否是解决方案,或者我是否正确实现了它。

如果有人处理过这类问题,我会很乐意解决这个问题。感谢。

1 个答案:

答案 0 :(得分:1)

from urllib.parse import urljoin

import requests
from bs4 import BeautifulSoup

BASE_URL = 'https://www.six-swiss-exchange.com'


def get_page_html(isin):
    params = {
        'id': isin,
        'portalSegment': 'EQ'
    }
    r = requests.get(
        '{}/shares/info_details_en.html'.format(BASE_URL),
        params=params
    )
    r.raise_for_status()
    return r.text


def get_supersector_info(soup):
    supersector = soup.find('td', text='ICB Supersector').next_sibling.a
    return {
        'link': urljoin(BASE_URL, supersector['href']),
        'text': supersector.text
    }


if __name__ == '__main__':
    page_html = get_page_html('CH0012221716CHF4')
    soup = BeautifulSoup(page_html, 'lxml')
    supersector_info = get_supersector_info(soup)

控制台:

https://www.six-swiss-exchange.com/search/quotes_en.html?security=C2700T
Industrial Goods & Services