96SEO 2026-02-23 12:17 2
常规爬虫都是爬完一个网页接着爬下一个网页不适应数据量大的网页本文介绍了多线程处理同时爬取多个网页的内容提升爬虫效率。

一般而言常规爬虫都是爬完一个网页接着爬下一个网页。
如果当爬取的数据量非常庞大时爬虫程序的时间开销往往很大这个时候可以通过多线程或者多进程处理即可完成多个网页内容同时爬取的效果数据获取速度大大提升。
简单来说CPU是进程的父级单位一个CPU可以控制多个进程进程是线程的父级单位一个进程可以控制多个线程那么到底什么是进程什么是线程呢
对于操作系统来说一个任务就是一个进程Process比如打开一个浏览器就是启动一个浏览器进程打开一个QQ就启动一个QQ进程打开一个Word就启动了一个Word进程打开两个Word就启动两个Word进程。
那什么叫作线程呢在一个进程内部往往不止同时干一件事比如浏览器它可以同时浏览网页、听音乐、看视频、下载文件等。
在一个进程内部这同时运行的多个“子任务”便称之称为线程Thread线程是程序工作的最小单元。
此外有个注意点对于单个CPU而言某一个时点只能执行一个任务那么如果这样是怎么在现实中同时执行多个任务进程的呢比如一边用浏览器听歌一边用QQ和好友聊天是如何实现的呢
答案是操作系统会通过调度算**流让各个任务进程交替执行。
以时间片轮转算法为例有5个正在运行的程序(即5个进程)
QQ、微信、谷歌浏览器、网易云音乐、腾讯会议操作系统会让CPU轮流来调度运行这些进程一个进程每次运行0.1ms因为CPU执行的速度非常快这样看起来就像多个进程同时在运行。
同理对于多个线程例如通过谷歌浏览器进程可以同时访问网页线程1、听在线音乐线程2和下载网络文件线程3等操作也是通过类似的时间片轮转算法使得各个子任务线程近似同时执行。
线程池一次性开辟一些线程我们用户直接给线程池提交任务线程任务的调度由线程池来完成
等待线程池中的人物全部执行完成才继续执行也称守护进程print(执行守护进程)
html.xpath(r/html/body/div[2]/div[4]/div[1]/table)[0]#
table.xpath(r./tr[position()1])for
td)csv_writer.writerow(txt)resp.close()print(url,
200):t.submit(download_one_page,fhttp://www.xinfadi.com.cn/marketanalysis/0/list/{i}.shtml)print(全部下载完毕)
协程的逻辑是当程序遇见IO操作时可以选择性的切换到其他任务上协程在微观上任务的切换切换条件一般就是IO操作在宏观上我们看到的是多个任务都是一起执行的上方的一切都是在在单线程的条件下充分的利用单线程的资源。
•函数被asyn修饰函数被调用时它不会被立即执行该函数被调用后会返回一个协程对象。
•创建一个协程对象构建一个asyn修饰的函数然后调用该函数返回的就是一个协程对象
此时的函数是异步协程函数此时函数执行得到的是一个协程对象asyncio.run(g1)
func1():print(你好呀11)time.sleep(3)
func2():print(你好呀21)time.sleep(2)print(你好呀22)
func3():print(你好呀31)time.sleep(4)print(你好呀32)
time.time()asyncio.run(asyncio.wait(tasks))
t1)你好呀21你好呀22你好呀11你好呀12你好呀31你好呀329.003259658813477
time.time()asyncio.run(asyncio.wait(tasks))
t1)你好呀21你好呀11你好呀31你好呀12你好呀22你好呀324.0028839111328125
asyncio.create_task(func2()),asyncio.create_task(func3())]await
time.time()asyncio.run(main())t2
t1)你好呀21你好呀31你好呀11你好呀12你好呀32你好呀224.001523017883301
{rhttp://kr.shanghai-jiuxin.com/file/mm/20210503/xy2edb1kuds.jpg,rhttp://kr.shanghai-jiuxin.com/file/mm/20210503/g4ok0hh2utm.jpg,rhttp://kr.shanghai-jiuxin.com/file/mm/20210503/sqla2defug0.jpg,rhttp://d.zdqx.com/aaneiyi_20190927/001.jpg}
urls:tasks.append(asyncio.create_task(aio_download(url)))await
使用下面的代码可以避免asyncio.get_event_loop().run_until_complete(main())
3.8以后建议使用asyncio.create_task()创建人物
•aiohttp中生成图片、视频等文件时使用resp.content.read()而requests库时并不需要read()
asyncio.get_event_loop().run_until_complete(main())
分析那些请求需要异步那些不需要异步在这个案例中获取目录只需要请求一次所以不需要异步
https://dushu.baidu.com/pc/detail?gid4306063500
http://dushu.baidu.com/api/pc/getCatalog?data{book_id:4306063500}
http://dushu.baidu.com/api/pc/getChapterContent
f{book_id}|{cid},need_bookinfo:
fhttp://dushu.baidu.com/api/pc/getChapterContent?data{data}async
aiofiles.open(img/title.txt,modew)
f.write(dic[data][novel][content])await
item[cid]tasks.append(asyncio.create_task(aio_download((cid,
rhttp://dushu.baidu.com/api/pc/getCatalog?data{book_id:book_id}asyncio.run(getCatalog(url))
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback