gpt4 book ai didi

python - 将字符串添加到 URL 末尾

转载 作者:太空宇宙 更新时间:2023-11-03 19:37:30 30 4
gpt4 key购买 nike

为了练习更多 Python 知识,我尝试了 pythonchallenge.com 上的挑战

简而言之,作为第一步,此挑战要求从末尾带有数字的 url 加载 html 页面。该页面包含一行文本,其中有一个数字。该数字用于替换 url 中的现有数字,从而将您带到序列中的下一页。显然,这种情况会持续一段时间......(这个挑战还有更多,但让该部分正常工作是第一步)。

我这样做的代码如下(暂时仅限于运行序列中的前四页)。由于某种原因,它第一次工作 - 它获取序列中的第二页,读取数字,转到第三页,然后读取那里的数字。但随后它就卡在了第三个。我不明白为什么,但认为这可能与我尝试将数字转换为字符串然后将其放在 URL 末尾有关。为了回答这个显而易见的问题,是的,我知道 pythonchallenge 工作正常 - 只要你有耐心,你就可以手动执行 url-numbers 操作,以进行确认,如果你愿意的话:p

import httplib2
import re

counter = 0
new = '12345' #the number for the initial page in the sequence, as a string

while True:
counter = counter + 1
if counter == 5:
break

original = 'http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing='
nextpage = original+new #each page in the sequence is visited by adding
#the number after 'nothing='
print(nextpage)

h = httplib2.Http('.cache')
response, content = h.request(nextpage, "GET") #get the content of the page,
#which includes the number for the
#*next* page in the sequence

p = re.compile(r'\d{4,5}$') #regex to find a 4 to 5 digit number at the end of
#the content

new = str((p.findall(content))) #make the regex result a string - is this
#where the problem lies?

print('cached?', response.fromcache) #I was worried my requests were somehow
#being cached not actually sent afresh to
#pythonchallenge. But it seems they aren't.

print(content)
print(new)

上面的输出如下。第一次运行似乎工作正常(将 92512 添加到 url 并成功获取下一页并找到下一个值),但之后它就卡住了,并且似乎没有按顺序加载下一页。通过在浏览器中手动更改 url 进行测试,确认数字正确并且 pythonchallenge 工作正常。

在我看来,将我的正则表达式搜索转换为字符串以添加到 URL 末尾时出现了问题 - 但为什么它应该第一次工作而不是第二次我不知道。我还担心我的请求可能只到达缓存(我是 httplib2 的新手,对它如何缓存没有信心),但事实似乎并非如此。我还向请求添加了一个无缓存参数,只是为了确定(此代码中未显示),但它没有帮助。

http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing=12345

('cached?', False)

and the next nothing is 92512

['92512']

http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing=['92512']

('cached?', False)

and the next nothing is 72758

['72758']

http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing=['72758']

('cached?', False)

and the next nothing is 72758

['72758']

http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing=['72758']

('cached?', False)

and the next nothing is 72758

['72758']

我将非常感谢任何能够指出我出错的地方以及任何相关提示的人

提前致谢...

最佳答案

http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing=['72758']
^^ ^^

我认为问题就出在这里。 findall() 返回一个列表:

re.findall(pattern, string[, flags])

Return all non-overlapping matches of pattern in string, as a list of strings. The string is scanned left-to-right, and matches are returned in the order found. If one or more groups are present in the pattern, return a list of groups; this will be a list of tuples if the pattern has more than one group. Empty matches are included in the result unless they touch the beginning of another match.

-- Python doc

关于python - 将字符串添加到 URL 末尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2746271/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com