我想用递归的方式查询一个网页下面的所有后续页面 /index.php /index_2.php 这样。
pages = set()
def searchAllPages(url, name):
'''获得所有页面链接'''
global pages
ObjUrl = BaseUrl + url
regular_str = r"\/%s\/index_*[0-9]*\.php" % name
time.sleep(1)
try:
r = requests.get(ObjUrl)
except (requests.ConnectionError, requests.HTTPError) as e:
return
else:
bsObj = BeautifulSoup(r.text,'lxml')
links = bsObj.find_all('a', href=re.compile(regular_str))
links = [i.attrs['href'] for i in links]
for link in links:
if link not in pages:
# 新页面
pages.add(link)
searchAllPages(link, name)
运行后报错 提示
equests.exceptions.ChunkedEncodingError: ("Connection broken: ConnectionResetError(10054, '远程主机强迫关闭了一个现有的连接。', None, 10054, None)", ConnectionResetError(10054, '远程主机强迫关闭了一个现有的连接。', None, 10054, None))
请问这个问题是如何引起的?
我该如何解决?
已经在多处搜索这个问题的原因。始终没找到符合我的答案。
但不是每次都失败的样子。。
找到一个比较符合我想法的答案,就是可能我的访问量和速度太频繁,被对面认为是攻击而关闭。
请问还有没 其他更合理的解释?
상대방 서버가 크롤링 방지를 수행했을 수도 있습니다. 요청에 헤더를 수동으로 추가해 보세요.
구체적인 Url 주소를 알려주시지 않아서 테스트가 어렵네요~
멀티스레딩으로 다시 작성하고 대기열을 사용하여 크롤링해야 하는 URL을 관리할 수 있습니다.
헤더를 추가하고 다시 접속을 시도할 수 있습니다.
답변 감사드립니다. 헤더 추가 후 3~4번 실행했는데 오류는 없었습니다
좋아요!