本帖最后由 tsu.xxw 于 2022-1-16 11:42 编辑
初次学习爬虫,爬取古诗文名句网站时,碰到了requests.exceptions.ConnectionError: (‘Connection aborted.’, RemoteDisconnected(‘Remote end closed connection without response’,))的错误
经过查询,发现是
1、http的连接数超过最大限制,默认的情况下连接是Keep-alive的,所以这就导致了服务器保持了太多连接而不能再新建连接。
2、ip被封
3 、程序请求速度过快三种可能的远因,
第一种原因就可以pass掉了,
对于第二种,我试了试自己电脑浏览器是可以正常访问的,也pass
对于第三种,我在最后加了一个sleep(),可是仍然提示,
最后,在某sdn中找到个可能解决的方法,随机切换User-Agent,试了试,果然成功了效果如下
代码首先是引入需要的库[Python] 纯文本查看 复制代码 import requests
from bs4 import BeautifulSoup
import time
import random 之后设置要访问的第一个网页,这里就是菜根谭的目录页[Asm] 纯文本查看 复制代码 url='https://www.shicimingjv.com/bookindex/27.html' 然后就是设置多个U-A然后随机切换[Python] 纯文本查看 复制代码 user_agent_list = [
"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; WOW64) Gecko/20100101 Firefox/61.0",
"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36",
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36",
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)",
"Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10.5; en-US; rv:1.9.2.15) Gecko/20110303 Firefox/3.6.15",
]
headers = {'User-Agent': random.choice(user_agent_list)} 之后实例化BeaufulSoup对象,并将爬取到的网页源码给他[Python] 纯文本查看 复制代码 page_text=requests.get(url=url,headers=headers).text
soup=BeautifulSoup(page_text,'lxml') 然后在浏览器控制台对章节的名称及储存的网址进行解析
[Asm] 纯文本查看 复制代码 li_list=soup.select('.book > ul > li') 之后对每个章节再次发送请求,实例化soup对象,并在控制台进行内容的解析.
完整代码及注释如下[Python] 纯文本查看 复制代码 import requests
from bs4 import BeautifulSoup
import time
import random
if __name__ == '__main__':
url='https://www.shicimingjv.com/bookindex/27.html'
user_agent_list = [
"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; WOW64) Gecko/20100101 Firefox/61.0",
"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36",
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36",
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)",
"Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10.5; en-US; rv:1.9.2.15) Gecko/20110303 Firefox/3.6.15",
] #多用几个请求头,防止网站拒绝,和下面得sleep异曲同工之妙
headers = {'User-Agent': random.choice(user_agent_list)}
page_text=requests.get(url=url,headers=headers).text #对指定页面get请求并将获取的数据text给page_text
soup=BeautifulSoup(page_text,'lxml') #创建一个BeautifulSoup对象,将网页源码加载到该对象中
li_list=soup.select('.book > ul > li') #开始解析标题及url,先将所有的li标签赋给一个列表
fp=open('./菜根谭.txt','w',encoding='utf-8')
for li in li_list: #接着对这个列表遍历
title=li.a.string #利用string将li标签中的标题获取出来
detail_url=li.a['href'] #定位到li标签中的href,里面时章节详情页的内容
detail_page_text=requests.get(url=detail_url,headers=headers).text #重新对详情页发起请求
detail_soup=BeautifulSoup(detail_page_text,'lxml') #重新实例化soup对象
div_tage=detail_soup.find('div',class_='entry-content clearfix') #对详情页解析,找到储存文章的class
text_content=div_tage.text #直接利用.text将文本都获取
fp.write(title+':'+text_content+'/n') #将获取的文本内容写入文件储存并换行
print(title+'下载完成')
time.sleep(6) 本代码仅供学习交流最后爬取出的文件就不放出来了,想获得的朋友可以自己动手操作一下 |