Python 将字符串添加到URL的结尾

Python 将字符串添加到URL的结尾,python,string,url-rewriting,httplib2,Python,String,Url Rewriting,Httplib2,为了进一步练习python,我一直在尝试pythonchallenge.com上的挑战 简言之,作为第一步,这个挑战需要从url加载一个html页面,并在最后添加一个数字。该页面包含一行文本,其中包含一个数字。该数字用于替换url中现有的数字,因此将引导您进入序列中的下一页。显然,这种情况会持续一段时间。。。(这一挑战还有很多,但让该部件正常工作是第一步) 我这样做的代码如下(目前仅限于运行序列的前四页)。出于某种原因,它在第一次工作时——它获取序列中的第二页,读取数字,转到第三页,然后在那里读

为了进一步练习python,我一直在尝试pythonchallenge.com上的挑战

简言之,作为第一步,这个挑战需要从url加载一个html页面,并在最后添加一个数字。该页面包含一行文本,其中包含一个数字。该数字用于替换url中现有的数字,因此将引导您进入序列中的下一页。显然,这种情况会持续一段时间。。。(这一挑战还有很多,但让该部件正常工作是第一步)

我这样做的代码如下(目前仅限于运行序列的前四页)。出于某种原因,它在第一次工作时——它获取序列中的第二页,读取数字,转到第三页,然后在那里读取数字。但是它在第三节被卡住了。我不明白为什么,尽管我认为这可能与我试图在把数字放在URL末尾之前将其转换为字符串有关。为了回答这个显而易见的问题,是的,我知道pythonchallenge工作正常-只要你有耐心,你可以手动做url号码的事情,如果你愿意,请确认: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新手,对它如何进行缓存没有信心),但它们似乎不是。我还在请求中添加了一个no-cache参数,只是为了确定(在代码中没有显示),但它没有帮助

('cached',False)

接下来是92512

['92512']

“92512”]

('cached',False)

其次是72758

['72758']

“72758”]

('cached',False)

其次是72758

['72758']

“72758”]

('cached',False)

其次是72758

['72758']

如果有人能指出我的错误所在,并提供相关提示,我将不胜感激

先谢谢你

http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing=['72758']
                                                             ^^     ^^
我想问题就在这里
findall()
返回列表:

关于findall(模式、字符串[、标志])

返回字符串中模式的所有非重叠匹配项,作为字符串列表。从左到右扫描字符串,并按找到的顺序返回匹配项。如果模式中存在一个或多个组,则返回组列表;如果模式有多个组,这将是一个元组列表。空匹配将包含在结果中,除非它们触及另一个匹配的开头

--Python文档

我想问题就在这里
findall()
返回列表:

关于findall(模式、字符串[、标志])

返回字符串中模式的所有非重叠匹配项,作为字符串列表。从左到右扫描字符串,并按找到的顺序返回匹配项。如果模式中存在一个或多个组,则返回组列表;如果模式有多个组,这将是一个元组列表。空匹配将包含在结果中,除非它们触及另一个匹配的开头

--Python文档


啊,当然,谢谢。我完全忘记了用search和group()来处理这个问题。当然,谢谢。我完全忘记了使用search和group()来处理这个问题。