Python 3.x 当网络崩溃时自动重定向
我正在尝试从网页上删除此网页和此搜索的所有“下一页” 当我转到搜索的第2页时,我正确地删除了所有链接 当我转到一个不存在的页面时,网站会重定向到搜索的第一个页面 例如,如果我转到第2500页,我没有得到一个错误,这是我想要的,我返回到第一页 下面是我的一段代码: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
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&st=G1&q=incerteza+pol%C3%ADtica+economia&cat=a&species=not%C3%ADcias&page=2"
class="proximo fundo-cor-produto"> próximo</a>
^^^^
# ok
<a data-pagina="41" href="?ss=4da73052cb8296b5&st=G1&q=incerteza+pol%C3%ADtica+economia&cat=a&species=not%C3%ADcias&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&st=G1&q=incerteza+pol%C3%ADtica+economia&cat=a&species=not%C3%ADcias&page=2"
class="proximo fundo-cor-produto"> próximo</a>
^^^^
# ok
<a data-pagina="41" href="?ss=4da73052cb8296b5&st=G1&q=incerteza+pol%C3%ADtica+economia&cat=a&species=not%C3%ADcias&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,是的,我的选择器中有一个输入错误,现在可以正常工作。第二个代码在最后一页之后仍然循环,但最后一个代码正常工作。我会做类似的事情。非常感谢你!