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

2024-04-26 03:11:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图为一个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=1520360103852HTTP/1.1

然而,如果我直接使用这个url,我会从请求中得到一个403错误,但是可以在浏览器中工作。我通常不会对这类事情有任何问题,但在这种情况下,我是否必须提交cookies或任何其他信息才能访问该页面-无需登录,并且可以从任何浏览器轻松访问

我的想法是1)第一次向有效的url发出请求,2)存储他们发送给你的cookie(我真的不知道怎么做),3)第二次向所需的url发出请求。这样行吗

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

如果有人处理过这类问题,我会喜欢任何解决这类问题的方法。谢谢


Tags: infocom信息idurlexchangehtmlwww
1条回答
网友
1楼 · 发布于 2024-04-26 03:11:54
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

相关问题 更多 >