【问题标题】:Python requests, xpath download whole linkPython 请求,xpath 下载整个链接
【发布时间】:2021-12-08 01:43:17
【问题描述】:

我正在尝试抓取此页面 http://kenyalaw.org:8181/exist/kenyalex/actview.xql?actid=CAP.%2016

并且有这个示例 python 代码:

import requests
from lxml import html

r = requests.get("http://kenyalaw.org:8181/exist/kenyalex/actview.xql?actid=CAP.%2016")
data = html.fromstring(r.content)
print(data.xpath("//div[@class='subleg']/a/@href")[0])

这给了我这个输出:

sublegview.xql?subleg=CAP。 16

但是当我在这个 xpath 上使用鼠标悬停时,会有不同的链接,如下图所示:

http://kenyalaw.org:8181/exist/kenyalex/sublegview.xql?subleg=CAP.%2016

【问题讨论】:

    标签: python xpath python-requests


    【解决方案1】:

    我认为它只是表示我猜你正在抓取的当前 URL 的分支,因此使用正则表达式删除 URL 中最后一个 / 之后的所有内容并加入目标元素的 href(我认为这样做是有意义的你)

    import requests
    import re
    from lxml import html
    
    url = "http://kenyalaw.org:8181/exist/kenyalex/actview.xql?actid=CAP.%2016"
    r = requests.get(url)
    data = html.fromstring(r.content)
    print(''.join([re.sub(r'(?<=/)[^/]*$', '', url), data.xpath("//div[@class='subleg']/a/@href")[0]]).replace(' ', ''))
    

    如果它不起作用,请告诉我...

    【讨论】:

    • 你甚至可以使用urljoin来加入,这比你的(相当简洁的)正则表达式(stackoverflow.com/a/476521/1581658)更简单、更灵活
    • 实际上,这是可以的答案,现在我发现它打开了不同的链接,这个链接kenyalaw.org:8181/exist/kenyalex/…
    • @CiricAleksandar 它只是网址之间的一个空格,您可以使用str.replace(' ', '') 方法来解决它
    • @CiricAleksandar 好的,还有错误吗?
    • 没有错误,但现在我意识到我需要这个链接kenyalaw.org:8181/exist/kenyalex/…,但我可以替换单词并获取这个链接
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-05
    • 2017-10-11
    相关资源
    最近更新 更多