初学爬虫爬取古诗文,第一次碰到反爬
本帖最后由 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,试了试,果然成功了效果如下
代码首先是引入需要的库import requests
frombs4 import BeautifulSoup
import time
import random之后设置要访问的第一个网页,这里就是菜根谭的目录页url='https://www.shicimingjv.com/bookindex/27.html'然后就是设置多个U-A然后随机切换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对象,并将爬取到的网页源码给他page_text=requests.get(url=url,headers=headers).text
soup=BeautifulSoup(page_text,'lxml')然后在浏览器控制台对章节的名称及储存的网址进行解析li_list=soup.select('.book > ul > li')之后对每个章节再次发送请求,实例化soup对象,并在控制台进行内容的解析.
完整代码及注释如下import requests
frombs4 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) 本代码仅供学习交流最后爬取出的文件就不放出来了,想获得的朋友可以自己动手操作一下 lz 浏览器控制台那需要用到正则是嘛 ukonw3477 发表于 2022-1-17 17:05
有没有推荐的教程,分享下
https://www.bilibili.com/video/BV1Z64y1h7Rk?p=87&spm_id_from=333.1007.top_right_bar_window_history.content.click
在b站看的,老师讲的很好 sleep的间隔可以多一点点,或者是请求一次就sleep一下 17798 发表于 2022-1-16 12:30
lz 浏览器控制台那需要用到正则是嘛
这个并没有用到正则,用的是BeautifulSoup库 厉害了 学习爬虫 requests.get之后,执行一次requests.close
就不会被封了 厉害,但是看不懂 用
s = requests.session()
for _ in range(x):
s.post(......
这样写效率提高不少
学习一下
初学看这个正好
页:
[1]
2