目录
1、点击这个链接,https://www.bqghi.cc/id/148332,跳转到如下图:
1、1 爬取任务和爬取的网站:
在此网站上,对任意一本小说全本爬取下来,并存储到电脑某个文件夹里;在这里我以“重生后我拒绝了校花和青梅”这本小说为例,进行详细演示操作,若有不详细的地方,欢迎友友们留言评论,我会与友友们互动的:
1、点击这个链接,https://www.bqghi.cc/id/148332,跳转到如下图:
2、 在IJ里新建一个.py文件,如下图:
3、在IJ里安装一些需使用库的包
pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install bs4 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install datetime -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install concurrent.futures -i https://pypi.tuna.tsinghua.edu.cn/simple
2、2 正式开始爬取
1、先给友友们看一下爬取下来的效果图(第一张和第二张区别是:不用多线程,和用多线程,爬取所用的时间比较):
2、附有源代码(可以直接~复制~粘贴~运行哦)
import requests from bs4 import BeautifulSoup from datetime import datetime from concurrent.futures import ThreadPoolExecutor start_time=datetime.now() headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36"} html=requests.get("https://www.bqghi.cc/id/148332",headers=headers).text soup=BeautifulSoup(html,"lxml") links=soup.find('div',{'class':'listmain'}).find_all('a') urls=[] for href in links: href_toals=href.get('href') href_toals='https://www.bqghi.cc/'+href_toals urls.append(href_toals) def down_load(): for url in urls: html=requests.get(url,headers=headers).text soup=BeautifulSoup(html,"lxml") try: title=soup.find('h1').get_text() content=soup.find('div',id='chaptercontent').get_text() except AttributeError as e: print("无了,出错了") print(title) if title!=None and content!=None: with open(f"D:\download_novel\{title}.txt","w",encoding="utf-8") as f: f.write(content) f.close() if __name__=='__main__': with ThreadPoolExecutor(max_workers=6) as executor: executor.submit(down_load(),4) end_time=datetime.now() print(f"共用了{(end_time-start_time).seconds} 秒")
3.3 合并下载好的文件内容到一个文件中(后续待更新)
在.py文件中加入以下代码就好啦
title_list=[] for url in urls: html=requests.get(url,headers=headers).text soup=BeautifulSoup(html,"lxml") try: title=soup.find('h1').get_text()+'.txt' title_text=title_list.append(title) except AttributeError as e: print("无了,出错了") # for title_line in title_list: # print(title_line) with open(r"文件路径","w",encoding="utf-8") as input: for title_line in title_list: with open(title_line, 'r', encoding='utf-8') as output: input.write(output.read())
合并后的效果图如下:
在使用以上方法时,需要特别注意一下几点:
路径问题:需要确认待合并的文件路径是否正确,特别是使用os和shutil模块时需要注意当前工作目录。
文件格式问题:需要确认待合并的文件格式是否一致,例如文本文件的编码格式。
文件顺序:需要考虑合并文件的顺序是否正确。
内存问题:当待合并的文件非常大时,需要特别关注内存使用情况,以避免程序崩溃或性能下降。
4、4 总结
在做数据抓取前我们可以从以下几方面来入手:
1.了解HTML和网页结构
2.安装和导入相关依赖库
3.发送http请求获取网页内容
4.解析HTML网页内容
5.定位内容和提取数据
6.保存抓取的数据