import requests from bs4 import BeautifulSoup #盗版小说网站服务器的地址,便于跟每个章节的url拼接,获取完整的url server='https://www.biqukan8.cc' #目录页的url start_url = 'https://www.biqukan8.cc/38_38836/' #自定义请求头的信息,自己电脑浏览器的版本,作为参数传到get里面去,将自己的爬虫进行伪装 headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 Edg/111.0.1661.44' } #定义完全局变量后,像服务器发起请求,如果请求成功,将会返回当前页面的所有内容,这个内容通常是html文件。 r = requests.get(start_url, headers=headers) #encoding可选参数,编码格式,返回自己可以看懂的文本,因为可能会出现乱码 r.encoding='gbk' #将字符串赋值给新的变量 html=r.text #因为BS4在解析数据的时候是需要依赖一定的解析器,所以我们需要解析器lxml bs = BeautifulSoup(html,features='lxml') #find_all查看bs这个对象里面的所有div标签,这个标签的名字必须是listmain。 # 属性定位。BS4规定如果遇到要查询class的情况,使用class_代替 texts = bs.find_all('div', class_='listmain') #两次筛选,1.缩小范围,2,再基础上提取里面的内容,然后赋值给全新的变量bs1 bs1 = BeautifulSoup(str(texts[0]),features='lxml') #find_all()该方法返回的是指定标签下面的所有内容,而且是列表的形式;传入的方式是多种多样的。 # 这里是传入单个指定的标签,要求返回a标签的全部内容 texts1 = bs1.find_all('a') #因为会有重复,重复12个章节,所以从13开始。得到子列表texts2 texts2=texts1[12:] #print(filename+"开始爬取") for i in texts2: # i.string查看元素i中的字符串,i.get('href')查看元素i中的href,并且跟服务器server进行拼接 print(i.string,server+i.get('href')) # url=连接服务器地址server+元素i中的href, url = server + i.get('href') # 传入到爬取单章的url里面 r1 = requests.get(url, headers=headers) #replace进行换行,并且替换。做爬取内容的清理,清理不要的符号和格式 html1 = r1.text.replace('<br />', '\n') #处理后的html1;指定解析器lxml bs2 = BeautifulSoup(html1, features='lxml') #传入两个指定的标签。 # 第一个是div,find_all查看bs这个对象里面的所有div标签 #第二个标签 #属性定位。BS4规定如果遇到要查询class的情况,使用class_代替. texts3 = bs2.find_all('div', class_='showtxt') #print(texts3[0].text) #获取元素i中的字符串,并且将这个值赋给chapte_headings chapter_headings=i.string #爬取的目录页 chapter_contents=texts3[0].text # file—name文件名字,mode:打开模式,r:只读模式,buffering:缓冲,提高cpu使用效率,encoding:可选参数,编码格式 filename=open('沧元图.txt', mode='a', buffering=-1, encoding='utf-8') #爬完一个目录就换行 filename.write(chapter_headings+'\n') #写入对应文件 filename.write(chapter_contents) #关闭文件 filename.close()
编写简易爬虫爬取网络小说
最新推荐文章于 2024-02-28 11:34:14 发布