Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 当网络崩溃时自动重定向_Python 3.x_Web Scraping_Beautifulsoup - Fatal编程技术网

Python 3.x 当网络崩溃时自动重定向

Python 3.x 当网络崩溃时自动重定向,python-3.x,web-scraping,beautifulsoup,Python 3.x,Web Scraping,Beautifulsoup,我正在尝试从网页上删除此网页和此搜索的所有“下一页” 当我转到搜索的第2页时,我正确地删除了所有链接 当我转到一个不存在的页面时,网站会重定向到搜索的第一个页面 例如,如果我转到第2500页,我没有得到一个错误,这是我想要的,我返回到第一页 下面是我的一段代码: try: html = urlopen("http://g1.globo.com/busca/?q=economia&cat=a&ss=1885518dc528dd9b&st

我正在尝试从网页上删除此网页和此搜索的所有“下一页”

当我转到搜索的第2页时,我正确地删除了所有链接

当我转到一个不存在的页面时,网站会重定向到搜索的第一个页面

例如,如果我转到第2500页,我没有得到一个错误,这是我想要的,我返回到第一页

下面是我的一段代码:

    try:
        html = urlopen("http://g1.globo.com/busca/?q=economia&cat=a&ss=1885518dc528dd9b&st=G1&species=not%C3%ADcias&page=110") #Search Link
        bsObj = BeautifulSoup(html) #BeautifulSoup's Link
        print(bsObj)
    except OSError:
        print("test")
我的目标是清除所有可用的页面,然后停止代码。要做到这一点,首先,我需要了解发生了什么


谢谢

您可以始终存储第一页的响应哈希值(如果它实际相同),然后检查每个页面的响应是否与第一页的哈希值匹配

此外,还可以使用urllib2

import urllib2, urllib
opener = urllib2.build_opener()
urllib2.install_opener(opener)
try: 
    response = urllib2.urlopen('http://g1.globo.com/busca/?q=incerteza+pol%C3%ADtica+economia&cat=a&ss=4da73052cb8296b5&st=G1&species=not%C3%ADcias&page=5000')
    bsObj = BeautifulSoup(response.read()) #BeautifulSoup's Link
    print(bsObj)

except urllib2.HTTPError, err:
    if err.code == 404:
        print "Page not found!"

您可以始终存储来自第一个页面的响应的散列(如果它实际相同),然后检查每个页面的响应是否与第一个页面的散列匹配

此外,还可以使用urllib2

import urllib2, urllib
opener = urllib2.build_opener()
urllib2.install_opener(opener)
try: 
    response = urllib2.urlopen('http://g1.globo.com/busca/?q=incerteza+pol%C3%ADtica+economia&cat=a&ss=4da73052cb8296b5&st=G1&species=not%C3%ADcias&page=5000')
    bsObj = BeautifulSoup(response.read()) #BeautifulSoup's Link
    print(bsObj)

except urllib2.HTTPError, err:
    if err.code == 404:
        print "Page not found!"

当到达最后一页时,按钮将被禁用:

 <a data-pagina="2" href="?ss=4da73052cb8296b5&amp;st=G1&amp;q=incerteza+pol%C3%ADtica+economia&amp;cat=a&amp;species=not%C3%ADcias&amp;page=2"
 class="proximo fundo-cor-produto"> próximo</a>
             ^^^^
             # ok

 <a data-pagina="41" href="?ss=4da73052cb8296b5&amp;st=G1&amp;q=incerteza+pol%C3%ADtica+economia&amp;cat=a&amp;species=not%C3%ADcias&amp;page=41"
     class="proximo disabled">próximo</>
             ^^^^
            # no more next pages
如果您使用的是要检查是否已重定向的请求,则可以访问
。history
属性:

In [1]: import requests

In [2]: r = requests.get("http://g1.globo.com/busca/?q=incerteza%20pol%C3%ADtica%20economia&cat=a&ss=4da73052cb8296b5&st=G1&species=not%C3%ADcias&page=5000")

In [3]: print(r.history)
[<Response [301]>]
In [4]:  r.history[0].status_code == 301
Out[4]: True

当到达最后一页时,按钮将被禁用:

 <a data-pagina="2" href="?ss=4da73052cb8296b5&amp;st=G1&amp;q=incerteza+pol%C3%ADtica+economia&amp;cat=a&amp;species=not%C3%ADcias&amp;page=2"
 class="proximo fundo-cor-produto"> próximo</a>
             ^^^^
             # ok

 <a data-pagina="41" href="?ss=4da73052cb8296b5&amp;st=G1&amp;q=incerteza+pol%C3%ADtica+economia&amp;cat=a&amp;species=not%C3%ADcias&amp;page=41"
     class="proximo disabled">próximo</>
             ^^^^
            # no more next pages
如果您使用的是要检查是否已重定向的请求,则可以访问
。history
属性:

In [1]: import requests

In [2]: r = requests.get("http://g1.globo.com/busca/?q=incerteza%20pol%C3%ADtica%20economia&cat=a&ss=4da73052cb8296b5&st=G1&species=not%C3%ADcias&page=5000")

In [3]: print(r.history)
[<Response [301]>]
In [4]:  r.history[0].status_code == 301
Out[4]: True

我认为您的逻辑是正确的,但是while条件在达到页数时不会停止代码。@ThalesMarques,是的,我的选择器中有一个输入错误,现在可以正常工作。第二个代码在最后一页之后仍然循环,但最后一个代码正常工作。我会做类似的事情。非常感谢你!我认为您的逻辑是正确的,但是while条件在达到页数时不会停止代码。@ThalesMarques,是的,我的选择器中有一个输入错误,现在可以正常工作。第二个代码在最后一页之后仍然循环,但最后一个代码正常工作。我会做类似的事情。非常感谢你!