在ASP.NET si上使用Python更改get请求中的“?”

2024-09-01 17:54:51 发布

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

我一直在尝试使用请求和BeautifulSoup为以下网站创建一个web scraper来提取信息,然后我将使用xlsxwriter将此添加到Excel工作表:

https://www.calcareers.ca.gov/CalHRPublic/Search/JobSearchResults.aspx#jcid=1&kw=a&classid=540&depid=274&locid=4&postdays=1&tenid=1&timid=1&minsal=2000&appmethid=1&socmajorcode=17-0000

上面的链接显示了上一页中设置为随机默认值的每个查询参数

通过使用请求,我能够传递一个与上述链接相同的有效负载,一旦我能够通过'#'符号,我就计划使用用户输入来更改它

这是我当前使用的代码:

from bs4 import BeautifulSoup
import requests
import xlsxwriter

# Argument variables
payload = {
    'jcid': 'value1',
    'kw': 'value2',
    'classid': 'value3',
    'depid': 'value4',
    'locid': 'value5',
    'postdays': 'value6',
    'tenid': 'value7',
    'timid': 'value8',
    'minsal': 'value9',
    'appmethid': 'value10',
    'socmajorcode': 'value11'
}

# Request
r = requests.get(
    'https://www.calcareers.ca.gov/CalHRPublic/Search/JobSearchResults.aspx#', params = payload)

print(r.url)

我从print(r.url)得到的回答是:

https://www.calcareers.ca.gov/CalHRPublic/Search/JobSearchResults.aspx?jcid=value1&kw=value2&classid=value3&depid=value4&locid=value5&postdays=value6&tenid=value7&timid=value8&minsal=value9&appmethid=value10&socmajorcode=value11

问题是网站不会加载'?',而是需要传递'#'

你有没有想过我该如何通过请求来完成这个任务?似乎这可以用硒来避免,但我想试试,因为我用这一块碰到了砖墙


Tags: httpssearchwwwcagovkwaspxclassid
1条回答
网友
1楼 · 发布于 2024-09-01 17:54:51

您可以重写requests.get()方法以供使用

import requests

class ASPRequest(requests.Request):
    def get(self, url, params, **kwargs):
        qstring = '#'
        for key, value in params.items():
            qstring = qstring+"{}={}&".format(key, value)
        return requests.get(url+qstring)

payload = {
    'jcid': 'value1',
    'kw': 'value2',
    'classid': 'value3',
    'depid': 'value4',
    'locid': 'value5',
    'postdays': 'value6',
    'tenid': 'value7',
    'timid': 'value8',
    'minsal': 'value9',
    'appmethid': 'value10',
    'socmajorcode': 'value11'
}

r = ASPRequest().get(
    url = 'https://www.calcareers.ca.gov/CalHRPublic/Search/JobSearchResults.aspx', params = payload)

print(r.url)

相关问题 更多 >