{"id":24616170,"url":"https://github.com/zhuruili/spider","last_synced_at":"2025-03-18T19:37:07.589Z","repository":{"id":237183981,"uuid":"793983603","full_name":"zhuruili/Spider","owner":"zhuruili","description":"一些简单的爬虫代码，会不定时更新，希望能帮到你","archived":false,"fork":false,"pushed_at":"2025-03-11T05:37:45.000Z","size":502,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-03-11T06:28:08.572Z","etag":null,"topics":["crawler","drissionpage","python","requests"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zhuruili.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-04-30T08:33:23.000Z","updated_at":"2025-03-11T05:37:49.000Z","dependencies_parsed_at":"2024-04-30T09:52:19.667Z","dependency_job_id":"b77cf3a2-4988-443d-9c14-cf1269ec0379","html_url":"https://github.com/zhuruili/Spider","commit_stats":null,"previous_names":["zhuruili/spider"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zhuruili%2FSpider","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zhuruili%2FSpider/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zhuruili%2FSpider/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zhuruili%2FSpider/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zhuruili","download_url":"https://codeload.github.com/zhuruili/Spider/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244290195,"owners_count":20429323,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["crawler","drissionpage","python","requests"],"created_at":"2025-01-24T22:16:17.070Z","updated_at":"2025-03-18T19:37:07.577Z","avatar_url":"https://github.com/zhuruili.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Spider\n\n![language](https://img.shields.io/badge/language-Python-blue)\n![license](https://img.shields.io/badge/License-MIT-red)\n\nThis repository records the simple code snippets I coded during my learning of web crawling techniques.Some simple crawler code will be updated from time to time, I hope it can help you，good luck！\n\n仓库记录着我在学习爬虫技术过程中留下的代码段。会不定时更新，希望能帮到你。\n\n---\n\n## 文件说明\n\n- [**SimPrograms**](https://github.com/zhuruili/Spider/tree/main/SimPrograms)  \n  记录自己学习爬虫所留下的简单程序，该文件夹下的爬虫程序的特点是'简单'，基本上都是一个Python文件直接运行即可。\n- [**SpiderPro**](https://github.com/zhuruili/Spider/tree/main/SpiderPro)  \n  这部分内容对初学者来说会有一定难度，小白慎入。该文件夹下的爬虫程序是我在公司实习时候留下的相对简单的爬虫业务代码，基本上都是全站级别的数据采集，数据量大概在几万到几十万不等\n- [**utils**](https://github.com/zhuruili/Spider/tree/main/utils)  \n  做爬虫项目时可能用上的实用类工具代码\n- [**tutorial**](https://github.com/zhuruili/Spider/tree/main/tutorial)  \n  爬虫相关知识点的简明教程与知识补充\n- [**Spi_DataSave**](https://github.com/zhuruili/Spider/tree/main/Spi_DataSave)  \n  保存部分爬取的内容，体量比较小的数据集我会同步到仓库，如有需要可以直接下载。\n\n## 内容目录\n\n### SimPrograms\n\n这部分的内容比较杂，相当于是借助一个个简单的案例来初步熟悉爬虫到底在干什么、它的流程一般是怎样的、基于请求的爬虫和基于自动化的爬虫大概分别是怎么做的等等\n\n- [urllib模拟登陆](https://github.com/zhuruili/Spider/blob/main/SimPrograms/package_urllib.py)  \n  使用`urllib`简单模拟发送请求与登陆\n- [NBA球员top50](https://github.com/zhuruili/Spider/blob/main/SimPrograms/spi_NBA.py)  \n  基于`requests`获取数据，使用`xpath`表达式提取数据\n- [当当网好评榜Top200](https://github.com/zhuruili/Spider/blob/main/SimPrograms/spi_dangdang.py)  \n  基于`requests`获取数据，使用正则表达式（`re`）提取数据并保存到文本文件\n- [经济日报全站爬虫](https://github.com/zhuruili/Spider/blob/main/SimPrograms/spi_EconomicDaily.py)  \n  对经济日报站点的全方位信息收集，基于`requests`与`re`，层层深入\n- [b站视频信息](https://github.com/zhuruili/Spider/blob/main/SimPrograms/spi_bilibili_rsc.py)  \n  基于`DrissionPage`实现自动化数据抓取，仅抓取搜索视频后看到的视频信息\n- [MOOC视频信息](https://github.com/zhuruili/Spider/blob/main/SimPrograms/spi_MOOC_rsc.py)  \n  程序与‘b站视频信息’爬取程序类似，同样是一个基于`DrissionPage`实现的简单Demo。\n- [JD商品评论自动化爬取](https://github.com/zhuruili/Spider/blob/main/SimPrograms/spi_JD_comments.py)  \n  本爬虫项目和先前的简单例子有些区别。首先是它做了翻页的适配。其次是通过提前手动登录的方式解决登陆/验证码等问题，随后再使用代码接管浏览器，不过这需要配置浏览器所占用的端口号\n- [某宝商品数据自动化采集](https://github.com/zhuruili/Spider/blob/main/SimPrograms/spi_Taobao.py)  \n  同样有翻页的适配，不过采取的是程序登陆，不过实测这样的效果似乎并不太好 -_-\n\n### SpiderPro\n\n我在实习期留下的代码，虽然算不上很成熟，但是与我之前入门时候依葫芦画瓢写下的半吊子代码相比还是有很大的改进，比如多了很多异常处理，做了很多优化来提高代码的效率，并且在经过一个个相似的项目的训练后能够逐渐形成一套属于自己的爬虫模板，对比刚开始的我也算有了不少提高\n\n\u003e [!Note]\n\u003e 注意：这部分内容虽然是我在公司实习留下的代码，但是代码全程由我自己编写，并非公司向我提供，并且代码中所有有关公司的信息或者使用的资源均已被我移除，你可以放心的查看或学习其中的内容\n\n- [光明日报全站采集](https://github.com/zhuruili/Spider/blob/main/SpiderPro/spi_gmw.py)  \n  基于`datetime`批量生成url、`requests`发送请求、`re`匹配内容、`pymysql`连接数据库并保存数据、`loguru`输出日志信息、`threading`与`ThreadPoolExecutor`控制多线程爬取、`time`控制休眠。本代码成功爬取了目标站点从2010年到2025年3月的全部内容，合计约36w条记录\n- [中国教育报](https://github.com/zhuruili/Spider/blob/main/SpiderPro/spi_jyb.py)  \n  中国教育报信息采集，整体上与`光明日报`项目类似，优化了部分代码细节\n- [中国旅游报](https://github.com/zhuruili/Spider/blob/main/SpiderPro/spi_lyb.py)  \n  在前两代报刊项目中发现了即使挂代理依旧存在网络错误导致数据缺失的问题。对此，本项目新增了对每日、每版次链接的访问重试，并增加了将多次重试请求依旧访问失败的链接保存到`Logs`下的日志文件的功能，方便项目跑完之后的数据校对与缺失填补\n- [美术报](https://github.com/zhuruili/Spider/blob/main/SpiderPro/spi_msb.py)  \n  和`中国旅游报`项目大体类似\n\n### utils\n\n- [请求测试](https://github.com/zhuruili/Spider/blob/main/utils/curl_test.py)  \n  最原始而简单的请求代码，你可以在抓取你需要的数据包后通过复制该数据包的`Copy as cURL(bash)`到例如`Curl`或`Json`这类格式规范化网站来快速得到一个基本的请求模板，你可以通过注释来一步步检测究竟是什么参数导致了访问的失败，在本示例代码中是`if-modified-since`参数影响了访问导致返回`304`响应码\n- [正则测试](https://github.com/zhuruili/Spider/blob/main/utils/re_test.py)  \n  快速测试你的正则表达式能否提取到你想要的数据，而不用每修改一次正则就重新跑一遍自己的完整项目来调试，代码非常简单但是有时候真的能节省很多时间\n- [查漏补缺](https://github.com/zhuruili/Spider/blob/main/utils/LeakFilling.py)  \n  在爬取大批量的数据时，即使你挂了代理，做了请求重试等多种措施，也依旧可能有缺漏的网页没访问到或者访问失败，你可以将这部分网页的链接保存，并使用这份工具文件快速解析你所保存的失败网页，并将结果输出在新的文件中，之后你只需要在生成的新文件中查找`200`的结果即可快速找到你之前项目中访问失败的链接中哪些其实仍然是可用的\n\n### tutorial\n\n这并不是一个教程仓库，但是当我开始稍微系统性的接触爬虫知识的时候我发现自己在知识储备上有很多的不足并且存在一些认知盲区。以往我只是根据一些简单的爬虫案例教程来入门，这导致我对很多知识其实是一知半解的，所以我希望留下一些以知识点为导向的简单代码段作为简明教程\n\n- [XPath函数](https://github.com/zhuruili/Spider/blob/main/tutorial/XPath_function.py)  \n  我曾经天真的认为形如`//div/p/text()`就是`XPath`的全部了，但是它居然还支持各种各样的函数来达到数据灵活提取的目的\n\n### DataSaved\n\n仓库中所保存的程序爬取所得到的数据集可能会随时变动，因此就不在此处列表展示了，感兴趣的话可以直接到存放数据集的文件夹下查看其具体内容。\n\n---\n\n\u003e [!Important]\n\u003e 警告：仓库代码仅供学习交流使用，不可用于非法用途！\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzhuruili%2Fspider","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzhuruili%2Fspider","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzhuruili%2Fspider/lists"}