用urlpar解析不同的页面

2024-05-13 22:02:19 发布

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

我试图解析一个网站的多个页面,但我不明白如何更改url的查询(如果这是有意义的?)你知道吗

我试着创建一个下一个页面,它占据了第一个页面,每次找到下一个页面元素时都会添加+1,但我想我做不到,因为我会有多个起始URL(都是类似的)。当我尝试获取下一个页面元素的信息时,它返回以下内容:

["loadmoreresult('?networkId=24&pageNumber=2&pageSize=100&allnet=yes&networkIds=1&networkIds=2&networkIds=3&networkIds=4&networkIds=61&networkIds=98&networkIds=108&networkIds=6&networkIds=5&networkIds=22&networkIds=13&networkIds=18&networkIds=15&networkIds=16&networkIds=105&networkIds=38&licenseIds=0&licenseIds=0&licenseIds=0&licenseIds=0&licenseIds=0&searchby=CountryCode&orderby=CountryCity&country=ES&city=&keyword=&lastCid=116490'); return false;"]

使用url.parse文件(响应.url)。我得到:

'networkId=24&pageNumber=1&pageSize=100&allnet=yes&networkIds=1&networkIds=2&networkIds=3&networkIds=4&networkIds=61&networkIds=98&networkIds=108&networkIds=6&networkIds=5&networkIds=22&networkIds=13&networkIds=18&networkIds=15&networkIds=16&networkIds=105&networkIds=38&licenseIds=0&licenseIds=0&licenseIds=0&licenseIds=0&licenseIds=0&searchby=CountryCode&orderby=CountryCity&country=ES&city=&keyword='

我所需要做的就是创建一个使用相同方案、路径的新链接,然后更改查询。你知道吗

如果你需要更多的信息请告诉我,我真的不知道什么是更相关的你,因为我还是一个初学者。你知道吗

from urllib.parse import urlparse, urljoin

urlparse(response.url)
>>> ParseResult(scheme='https', netloc='www.wcaworld.com', path='/Directory', params='', query='networkId=24&pageNumber=1&pageSize=100&allnet=yes&networkIds=1&networkIds=2&networkIds=3&networkIds=4&networkIds=61&networkIds=98&networkIds=108&networkIds=6&networkIds=5&networkIds=22&networkIds=13&networkIds=18&networkIds=15&networkIds=16&networkIds=105&networkIds=38&licenseIds=0&licenseIds=0&licenseIds=0&licenseIds=0&licenseIds=0&searchby=CountryCode&orderby=CountryCity&country=ES&city=&keyword=', fragment='')

response.css('a.loadmore::attr(onmouseover)').extract()
>>>["loadmoreresult('?networkId=24&pageNumber=2&pageSize=100&allnet=yes&networkIds=1&networkIds=2&networkIds=3&networkIds=4&networkIds=61&networkIds=98&networkIds=108&networkIds=6&networkIds=5&networkIds=22&networkIds=13&networkIds=18&networkIds=15&networkIds=16&networkIds=105&networkIds=38&licenseIds=0&licenseIds=0&licenseIds=0&licenseIds=0&licenseIds=0&searchby=CountryCode&orderby=CountryCity&country=ES&city=&keyword=&lastCid=116490'); return false;"]

Tags: urles页面countryyescountrycodeorderbypagesize
1条回答
网友
1楼 · 发布于 2024-05-13 22:02:19

您需要获得<a>元素的基本url,这是查询字符串开始https://example.com/a/path/?query=param之前url的一部分,因此这里的基本url将是https://example.com/a/path/。将其保存到变量中。然后使用urllib.parse.parse_qsl解析查询字符串,然后更新页码并将其与基本url连接起来。你知道吗

from urllib.parse import parse_qsl, urljoin, urlencode

BASE_URL = 'https://example.com/a/path/'
# you can also extract base url from scrapy.Response object
# BASE_URL, _ = splitquery(response.url)

if __name__ == '__main__':
    # extract query parameter from from a url
    q = 'networkId=24&pageNumber=2&pageSize=100&allnet=yes&networkIds=1&networkIds=2&networkIds=3&networkIds=4&networkIds=61&networkIds=98&networkIds=108&networkIds=6&networkIds=5&networkIds=22&networkIds=13&networkIds=18&networkIds=15&networkIds=16&networkIds=105&networkIds=38&licenseIds=0&licenseIds=0&licenseIds=0&licenseIds=0&licenseIds=0&searchby=CountryCode&orderby=CountryCity&country=ES&city=&keyword=&lastCid=116490'
    parsed = dict(parse_qsl(q))
    next_page = int(parsed['pageNumber']) + 1
    parsed['pageNumber'] = next_page

    next_page_url = urljoin(BASE_URL, '?' + urlencode(parsed))

    print(next_page_url)

输出:

https://example.com/a/path/networkId=24&pageNumber=3&pageSize=100&allnet=yes&networkIds=38&licenseIds=0&searchby=CountryCode&orderby=CountryCity&country=ES&lastCid=116490

相关问题 更多 >