应该是2018年最详细的python爬虫入门教程了!
爬虫(又被称为网页蜘蛛,网络机器人)就是模拟客户端发送网络请求,接收请求响应,一种按照一定的规则,自动地抓取互联网信息的程序。
原则上,只要是浏览器(客户端)能做的事情,爬虫都能够做。
根据被爬网站的数量的不同,我们把爬虫分为:
- 通用爬虫 :通常指搜索引擎的爬虫
- 聚焦爬虫 :针对特定网站的爬虫
Robots协议:网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取,但它仅仅是道德层面上的约束。
浏览器会主动请求js,css等内容,js会修改页面的内容,js也可以重新发送请求,最后浏览器渲染出来的内容在elements中,其中包含css,图片,js,url地址对应的响应等。
但是在爬虫中,爬虫只会请求url地址,对应的拿到url地址对应的响应。浏览器渲染出来的页面和爬虫请求的页面并不一样。所以在爬虫中,需要以url地址对应的响应为准来进行数据的提取。
url的形式:scheme://host[:port#]/path/…/[?query-string][#anchor]
- scheme:协议(例如:http, https, ftp)
- host:服务器的IP地址或者域名
- port:服务器的端口(如果是走协议默认端口,80 or 443)
- path:访问资源的路径
- query-string:参数,发送给http服务器的数据
- anchor:锚(跳转到网页的指定锚点位置)
HTTP:超文本传输协议,默认端口号:80
HTTPS:HTTP + SSL(安全套接字层),默认端口号:443 (HTTPS比HTTP更安全,但是性能更低)
HTTP常见请求头
- Host (主机和端口号)
- Connection (链接类型)
- Upgrade-Insecure-Requests (升级为HTTPS请求)
- User-Agent (浏览器名称)
- Accept (传输文件类型)
- Referer (页面跳转处)
- Accept-Encoding(文件编解码格式)
- Cookie (Cookie)
- x-requested-with :XMLHttpRequest (是Ajax 异步请求)
常见的请求方法
- GET
- POST
- 我刚整理了一套2018最新的0基础入门和进阶教程,无私分享,加Python学习q-u-n :二二七,四三五,四五零 即可获取,内附:开发工具和安装包,以及系统学习路线图
有关 GET 请求的其他一些注释:
- GET 请求可被缓存
- GET 请求保留在浏览器历史记录中
- GET 请求可被收藏为书签
- GET 请求不应在处理敏感数据时使用
- GET 请求有长度限制
- GET 请求只应当用于取回数据
有关 POST 请求的其他一些注释:
- POST 请求不会被缓存
- POST 请求不会保留在浏览器历史记录中
- POST 不能被收藏为书签
- POST 请求对数据长度没有要求
响应状态码(status code)
常见的状态码:
- 200:成功
- 302:临时转移至新的url
- 307:临时转移至新的url
- 404:not found
- 500:服务器内部错误
代理IP的分类:
透明代理(Transparent Proxy),透明代理虽然可以直接“隐藏”你的IP地址,但是还是可以从HTTP_X_FORWARDED_FOR来查到你是谁。
匿名代理(Anonymous Proxy),匿名代理比透明代理进步了一点:别人只能知道你用了代理,无法知道你是谁。
混淆代理(Distorting Proxies),与匿名代理相同,如果使用了混淆代理,别人还是能知道你在用代理,但是会得到一个假的IP地址,伪装的更逼真。
高匿代理(Elite proxy或High Anonymity Proxy),高匿代理让别人根本无法发现你是在用代理,所以是最好的选择。
Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,我们只需要实现少量的代码,就能够快速的抓取。
Scrapy 使用了Twisted['twɪstɪd]异步网络框架,可以加快我们的下载速度。
- 异步:调用在发出之后,这个调用就直接返回,不管有无结果
- 非阻塞:关注的是程序在等待调用结果(消息,返回值)时的状态,指在不能立刻得到结果之前,该调用不会阻塞当前线程。
scrapy的流程
从上图可以衍生出下图,个人觉得更加好理解一些
其流程可以描述如下:
- 调度器把requests-->引擎-->下载中间件--->下载器
- 下载器发送请求,获取响应---->下载中间件---->引擎--->爬虫中间件--->爬虫
- 爬虫提取url地址,组装成request对象---->爬虫中间件--->引擎--->调度器
- 爬虫提取数据--->引擎--->管道
- 管道进行数据的处理和保存
scrapy中每个模块的具体作用:
scrapy项目实现流程:
- 创建一个scrapy项目:scrapy startproject +<项目名字>
- 生成一个爬虫:scrapy genspider +<爬虫名字> + <允许爬取的域名>
- 提取数据:完善spider,使用xpath等方法
- 保存数据:pipeline中保存数据
scrapy.cfg :项目的配置文件 mySpider/ :项目的Python模块,将会从这里引用代码 mySpider/items.py :项目的目标文件 mySpider/pipelines.py :项目的管道文件 mySpider/settings.py :项目的设置文件 mySpider/spiders/ :存储爬虫代码目录
认识scrapy的debug信息
每次程序启动后,默认情况下,终端都会出现很多的debug信息,那么下面我们来简单认识下这些信息
scrapy shell的使用
- response.url:当前响应的url地址
- response.request.url:当前响应对应的请求的url地址
- response.headers:响应头
- response.body:响应体,也就是html代码,默认是byte类型
- response.requests.headers:当前响应的请求头
settings.py中的重点字段和内涵
- USER_AGENT 设置ua
- ROBOTSTXT_OBEY 是否遵守robots协议,默认是遵守
- CONCURRENT_REQUESTS 设置并发请求的数量,默认是16个
- DOWNLOAD_DELAY 下载延迟,默认无延迟
- COOKIES_ENABLED 是否开启cookie,即每次请求带上前一次的cookie,默认是开启的
- DEFAULT_REQUEST_HEADERS 设置默认请求头
- SPIDER_MIDDLEWARES 爬虫中间件,设置过程和管道相同
- DOWNLOADER_MIDDLEWARES 下载中间件
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
程序员面试被问:公司困难会留下来吗?怒反问:公司辉煌会涨薪?
俗话说“树倒猢狲散”,每一个公司的发展历程都是曲折的,当生意比较火爆的时候,对于公司的发展是好事!可当公司在低迷期的时候,维持公司的正常运转尤为重要。但这时候可能有员工看到公司颓态,会认为待着这里没有发展,于是就会产生离职的想法,而员工一旦离职,公司想要维持正常运转的难度就会增加,难度越大就有越多员工离职,这无疑是一个恶性循坏。 有些领导为了避免出现这种情况,会提倡员工带着“荣辱与共”的心态工作: 这位程序员在面试的时候,就碰到了这样的公司:面试官问他是不是在公司困难的时候,无法和公司一同度过难关,而是选择离开?然后他自己特别想说是,但是碍于职场规则,不能够直接说出自己的答案,于是事后心里憋屈! 有网友对于这个问题束手无策,如果说不会留下来的话,那么面试估计就凉了,但是如果说留下来,万一公司真的出现危机,自己还要留下来继续工作,那无疑是一种煎熬!但是有网友深谙此道,所以建议楼主:表面说会留下来,但是当公司出现危机的时候,绝对会义无反顾得走! 众所周知,互联网公司的老板都有一个通病,那就是宁愿花高价再招聘新人,都不愿意给老员工涨薪!所以就有网友反怼:公司赚大钱、辉煌腾达的时候,会给公司每...
- 下一篇
大公司为什么还在采用过时的技术
许多刚毕业的程序员朋友,都有一个执念,想要进那种规模大一点的公司、上市的、业内有名的最好。 为什么大家都想去大公司? 因为很多人觉得,公司大一点,正规一点。开发技术应该不错,应该与时俱进,流程应该会规范一些。说到这里,依然有这种想法的朋友,请握个爪。 然而,当他刷完什么《剑指OFFER》、《编程之美》,废了好大一番功夫进去以后,却发现完全和自己想的不一样。他发现他所在的大公司: (1)代码混乱 I、比如一个发送Http请求的Util类,竟然出现了三四种。开发人员A封装了一种,开发人员B封装了一种,公司框架自带了一种。 II、到处充斥着Ctrl+C和Ctrl+V的味道,更有甚者,居然连author都不改,原样复制过去。 III、日志风格千奇百怪,缺乏统一规范。每个人都有一套自己的日志风格。重点是,一些关键步骤,居然不写日志。 IV、一些几千行的类、关键步骤不加注释、一个方法几十个参数都是随处可见。 (2)开发流程混乱 I、一个项目组IDE和JDK都不统一,比如用Idea,eclipse的都有。然而重点是,把idea、eclipse独有的配置文件都上传到了服务器。 II、完全没有文档。比如...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS8编译安装MySQL8.0.19
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Windows10,CentOS7,CentOS8安装Nodejs环境