如果请求响应为404或505,如何跳过页面

MR1*_*MR1 -1 python web-scraping python-3.6

我用python编写了一个刮板。不幸的是,当刮板遇到404505页面时,它将停止工作。如何避免循环中的那些页面以避免此问题?

这是我的代码:

import requests
from bs4 import BeautifulSoup
import time
c = int(40622)
a = 10
for a in range(10):
    url = 'https://example.com/rockery/'+str(c)
    c = int(c) + 1
    print('-------------------------------------------------------------------------------------')
    print(url)
    print(c)
    time.sleep(5)
    response = requests.get(url)
    html = response.content
    soup = BeautifulSoup(html, "html.parser")
    name = soup.find('a', attrs={'class': 'name-hyperlink'})
    name_final = name.text

    name_details = soup.find('div', attrs={'class': 'post-text'})
    name_details_final = name_details.text

    name_taglist = soup.find('div', attrs={'class': 'post-taglist'})
    name_taglist_final = name_taglist.text

    name_accepted_tmp = soup.find('div', attrs={'class': 'accepted-name'})
    name_accepted = name_accepted_tmp.find('div', attrs={'class': 'post-text'})
    name_accepted_final = name_accepted.text

    print('q_title=',name_final,'\nq_details=',name_details,'\nq_answer=',name_accepted)
    print('-------------------------------------------------------------------------------------')
Run Code Online (Sandbox Code Playgroud)

这是我点击404505页面时遇到的错误:

错误

追溯(最近一次通话):

在第18行的文件“ scrab.py”中

name_final = name.text

AttributeError:“ NoneType”对象没有属性“ text”

The*_*CAL 5

检查响应的状态码,如果它不是200(确定),则可以通过以下continue语句转到循环中的下一个迭代来跳过它:

response = requests.get(url)
if response.status_code != 200: #could also check == requests.codes.ok
   continue
Run Code Online (Sandbox Code Playgroud)