爬虫

python开源爬虫框架scrapy源码解析(四)

走远了吗. 提交于 2019-12-10 01:42:50
引擎是整个 scrapy 的核心控制和调度 scrapy 运行. Engine 的 open_spider 方法完成了一些初始化 , 以及启动调度器获取种子队列以及去重队列 . 最后调用 self._nest_request 开始一次爬取过程 . @defer.inlineCallbacks def open_spider(self, spider, start_requests=(), close_if_idle=True): assert self.has_capacity(), "No free spider slot when opening %r" % \ spider.name logger.info("Spider opened", extra={'spider': spider}) nextcall = CallLaterOnce(self._next_request, spider) #首先获取next调用。 scheduler = self.scheduler_cls.from_crawler(self.crawler) #从crawler获取调度器 start_requests = yield self.scraper.spidermw.process_start_requests(start_requests, spider) slot = Slot

Scrapy框架——命令行工具

ぐ巨炮叔叔 提交于 2019-12-07 21:24:29
Scrapy常用命令: 全局命令,不需要建项目也可执行: startproject settings runspider shell fetch view version 项目命令: crawl cheak list edit parse genspider deploy bench 下面一次介绍各命令功能: ‍ 1. ‍ startproject: 新建爬虫项目 语法: scrapy startproject <项目名> 2. genspider: 在项目中新建spider 语法: scrapy genspider [-t 模板] <爬虫名> <域名> 模板有四种 basic crawl csvfeed xmlfeed, 可用-d来预览生成的模板 D:\crawler\lagou\spider>scrapy genspider -d basic # -*- coding: utf-8 -*- import scrapy class $classname(scrapy.Spider): name = "$name" allowed_domains = ["$domain"] start_urls = ( 'http://www.$domain/', ) def parse(self, response): pass 3 . crawl: 运行爬虫 语法: scrapy crawl

医学教育网批量资源下载程序之——探路

允我心安 提交于 2019-12-07 12:42:11
在上一个博文里,博主已实现用python登陆了 www.med66.com 网站。 博文: http://my.oschina.net/hevakelcj/admin/edit-blog?blog=357852 To www.med66.com网站设计师:我只是想批量下载已花钱购买的资源罢了,没有恶意。 成功登陆,就意味着进入了网站的大门。剩下的工作就是进去之后在里面取想到的东西。 如下就是登陆成功后的网页,我们需要从这个页面获取课程列表。 打开Firefox的调试工具,看一下上面的元素是如何布局的。 通过Firefox的调试工具很容易找到课程列表的元素,所有课程列表在 <div class="ul_con_uc_show"> 里。 而每一个<div class="uc_row"> 就是一个课程。 每个课程的"点击这里从头开始学"后面有个链接。如上 href="http://elearning.med66.com/cware/video/videoList/videoList.shtm?cwareID=700914" 我们分析一下这个链接地址,访问固定的页面 http://elearning.med66.com/cware/video/videoList/videoList.shtm 后面带个参数 cwareID=700914。这个"700914"就是课程的ID号。

医学教育网批量资源下载程序之——完成

只愿长相守 提交于 2019-12-07 12:41:46
大家好! 经过好长时间的拆腾,终于实现了 “医学教育网批量资源下程序” 。 相关的博文: 医学教育网批量资源下载程序之——登陆 医学教育网批量资源下载程序之——探路 医学教育网批量资源下载程序之——获取下载列表 医学教育网批量资源下载程序之——ftp下载失败问题 代码已提交到: http://git.oschina.net/hevake_lcj/Med66VideoDownloader 感谢大家的关注,欢迎高手指点! 今天在昨天的功能基础上,实现多线程并行下载。速度快好十几倍!倍爽! 来源: oschina 链接: https://my.oschina.net/u/243525/blog/369002

医学教育网批量资源下载程序之——登陆

时光毁灭记忆、已成空白 提交于 2019-12-06 21:16:59
首先申明 To www.med66.com网站设计师:我只是想批量下载已花钱购买的资源罢了,没有恶意。 12-18 今晚接到老姐的电话,说她已在“医学教育网”订购了不少视频,要我帮她将所有的视频都下载下来。 我看了一下,里面有24门科目,每门科目有40多节。要我手动一个一个下,还不如让我去死。 这种重复的事情还是让程序来做吧!这里开一篇博客直播编写的过程。 被爬网址:http://www.med66.com/ 前几天我刚做完一个Qihuiwang的爬虫软件。这次我评估了一下,这次要做的视频下载爬虫程序比上次又有新的挑战: (1)要处理登陆的过程,上一个不需要登陆就可以直接爬。这次必须要登陆才行。涉及到post数据表的过程 (2)要识别JavaScript程序。我看一下,在我获取网页的那个按钮上写的是 onclick="goDownload('700914', ' ')。这个要转换进行转换成url地址 (3)下载需要记载哪些文件已经下载了,以免每次启动程序都从头开始下载。这是不合理的。 (4)下载的文件要以课程进行目录组织。 网站路径如下: 登陆页面 -(登陆)-> 学员课程页面 -(进入课程)-> 目录页面 -(下载中心)-> 下载页面 --> 小节视频 好,明天开搞,尽情关注! 12-19 今晚加了个班,很累了,况且容忍我好好休息一晚。明日再整! 12-22

Python3.6实现12306火车票自动抢票,附源码

会有一股神秘感。 提交于 2019-12-06 14:43:33
Python(发音:英[?pa?θ?n],美[?pa?θɑ:n]),是一种面向对象、直译式电脑编程语言,也是一种功能强大的通用型语言,已经具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法非常简捷和清晰,与其它大多数程序设计语言不一样,它使用缩进来定义语句。 Python支持命令式程序设计、面向对象程序设计、函数式编程、面向切面编程、泛型编程多种编程范式。与Scheme、Ruby、Perl、Tcl等动态语言一样,Python具备垃圾回收功能,能够自动管理存储器使用。它经常被当作脚本语言用于处理系统管理任务和网络程序编写,然而它也非常适合完成各种高级任务。Python虚拟机本身几乎可以在所有的作业系统中运行。使用一些诸如py2exe、PyPy、PyInstaller之类的工具可以将Python源代码转换成可以脱离Python解释器运行的程序。 最近在学Python,所以用Python写了这个12306抢票脚本,分享出来,与大家共同交流和学习,有不对的地方,请大家多多指正。话不多说,进入正题: 这个脚本目前只能刷一趟车的,人数可以是多个,支持选取作为类型等。 实现思路是splinter.browser模拟浏览器登陆和操作,由于12306的验证码不好自动识别,所以,验证码需要用户进行手动识别,并进行登陆操作,之后的事情

python-01:为什么想要做这一系列的博客

☆樱花仙子☆ 提交于 2019-12-06 08:49:27
"我为什么想要做这一系列的博客" 为了记录 我算是半个计算机专业的学生,大学期间学习了C语言,但是当时没有好好学 大学老师的授课方式是从网上下载PPT,然后照着PPT来念,以一种消磨时间为目的的方式来给我们传授知识,我很快厌倦,最后的C语言靠着别人的助攻得了一个80多分,可笑的是,那却是我专业课中成绩最好的一门 出了学校之后就再没人教我编程了,而且我一直对培训学校有着强烈的不信任感,所以只好自己自学 自学过程中我遇到很多问题,走了很多弯路,也几度中断,这里把遇到的问题和想法记录一下: 1. 要想清楚你为什么学习编程以及想要学习什么语言 做任何事情最忌讳的就是自我怀疑,所以一开始就要想好为什么学编程,学哪种编程语言。不要在学习C语言的过程中想如果当初学习JAVA会不会好一点,或者听到别人说学C++年薪多少,就对自己的选择动摇,其实,不管是什么语言,只要你学得精通,都会有用武之地 2. 兴趣 对于毅力不够的人来说,兴趣是你坚持下去的最大的因素,其次是积极性 3. 学习方法 我碰到的几乎所有的教材都会花很多时间讲基础知识,我不能说这种方法是错误的,只是,我不能赞同。当我看完一本书或者是看完一套视频教程之后,发现我还是不能作出想要的东西,我花一个月甚至几个月的时间辛辛苦苦的看教程,记笔记,做练习,结果我面对的还是一个黑乎乎的终端窗口,做着数学题,把一句话翻来覆去的输出

python-51: 带有验证码的模拟登陆

妖精的绣舞 提交于 2019-12-06 06:20:00
好了好了,又开更了,前面两天都在研究如何实现带有验证码的登陆,这个过程略微波折,幸好得到一位做网页设计的朋友的解答,虽然现在有的知识还不是很清楚,但好歹终于有点进展了,毕竟我也还是要先学会了才能写这些东西啊 其实最主要的问题还是找实例网站,以前觉得需要输入验证码才能登陆的网站真的是很烦,但是等到我这几天需要找一些这样的网站的时候,突然全世界的网站都是不需要再输入验证码,只要输入用户名和密码就可以登陆的,心情略为低落。当然,即使是只输入用户名和密码,它们也会在后台对数据进行各种处理,总之不会让我们轻易得逞,后面有机会的话还想去试一试怎么模拟登录这些网站,现在先回到我们的这个实例 我们这个实例是模拟登录凤凰网,凤凰网的登录是需要输入验证码的,就像这样 前面说了要找验证码登陆的最简单的实例来进行分析,这种情况应该是最简单的了,相比于一些扫二维码登陆,或者是手机短信验证码的,这已经算是挺简单的了,好了,深吸一口气,开始进入下一个实例 实例:带有验证码的自动登陆 实例要求:模拟验证码登陆中输入用户名,密码和验证码的登陆过程,并实现成功登陆 实例分析: 1. 登陆过程需要输入用户名和密码,结合上一个实例的流程下手 2. 验证码是一个新的知识,需要了解验证码的机制和实现验证码登陆的方法 来源: oschina 链接: https://my.oschina.net/u/2429887/blog

python-02:学习路线

為{幸葍}努か 提交于 2019-12-06 06:19:48
随时更新的学习路线 1. python基础知识 麦子学院的几个短视频 python 爬虫基础 2. 以python爬虫作为入手点深入学习 1. 爬虫基础知识,最简单的爬虫程序,理解最简单的爬虫程序 2. 丑事百科实例 1. 下载源码 2. 利用浏览器和工具进行网页源码分析 3. 正则表达式 3. 爬虫下载图片并保存到本地----极视界实例 1. 怎么下载图片 2. 怎么创建文件夹 4. 爬虫模拟登录 1. 模拟登录的流程 2. cookies是什么 3. 直接使用cookies登录 4. 发送数据 post,get 5. 使用浏览器和工具找到交互的数据 6. 爬虫post数据模拟登录----登录公司OA实例 7. 一个其他网站的模拟登录实例 8. 带有验证码机制的网站模拟登录实例 python 爬虫进阶 1. 学习 bs4 2. 学习request 3. 动态网页的处理方法 4. scrpy 框架学习 5. 多线程爬虫 6. 分布式爬虫 3. 学习djange框架 4. 学习python图形界面程序的编写 来源: oschina 链接: https://my.oschina.net/u/2429887/blog/534454

Scrapy + Mongo 构建一个网页爬虫

左心房为你撑大大i 提交于 2019-12-06 05:57:57
Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。 Scrapy官方架构图 各部件职能 Scrapy Engine 控制数据流在系统组件中的流动,并回调相关动作事件 Scheduler 从引擎接受request并入队,当引擎请求他们时返回request Downloader 获取页面数据并提供给引擎,而后提供给spider Spiders 用户定义的爬虫模块 Item Pipeline 处理被spider提取出来的item,包括丢弃、验证和持久化等等 Downloader middlewares 引擎及下载器之间的hook,处理Downloader传递给引擎的response,同时支持用户挂载自定义逻辑 Spider middlewares 引擎及Spider之间的hook,处理spider的输入(response)和输出(items及requests),同时支持用户挂载自定义逻辑 数据流转 核心引擎从爬虫获取初始url,并生成一个Request任务投入Scheduler调度计划里 引擎向调度器请求一个新的Request爬取任务并转发给downloader下载器 下载器载入页面并返回一个Response响应给引擎 引擎将Response转发给Spider爬虫做 数据提取 和 搜索新的跟进地址