
网络爬虫
python网络爬虫实现
止步听风
这个作者很懒,什么都没留下…
展开
-
Python网络爬虫(二十四)——Scrapy-Redis
Scrapy-Redis 分布式爬虫组件Scrapy 是一个框架,他本身是不支持分布式的。如果我们想要做分布式的爬虫,就需要借助一个组件叫做 Scrapy-Redis,这个组件正是利用了 Redis 可以分布式的功能,集成到 Scrapy 框架中,使得爬虫可以进行分布式。可以充分的利用资源(多个ip、更多带宽、同步爬取)来提高爬虫的爬行效率。分布式爬虫的优点:可以充分利用多台机器的带宽 可以充分利用多台机器的 ip 地址 多台机器做,爬取效率更高分布式爬虫必须要解决的问题:分布式爬虫是原创 2020-05-25 23:40:42 · 289 阅读 · 0 评论 -
Python网络爬虫(二十三)——Redis
概述redis 是一种支持分布式的非关系型数据库,数据是保存在内存中,同时 redis 可以定时把内存数据同步到磁盘,即可以将数据持久化,并且他比 memcached 支持更多的数据结构。redis 和 memcached memcached redis 类型 纯内存数据库 内存磁盘同步数据库 数据类型 在定义value时就要固定数据类型 不需要 ...原创 2020-05-25 23:11:46 · 302 阅读 · 0 评论 -
Python网络爬虫(二十二)——Downloader Middlewares
在 Scrapy 框架中的 Engine 和 Downloader 之间存在一个 Downloader Middlewares,我们知道 spider 发送的请求需要通过 Engine 发送给 Downloader 进行下载,而 Downloader 完成下载后的响应要通过 Engine 发送到 spider 进行解析。而下载器中间件则可以在请求发送给 Downloader 和响应发送给 Engine 之前执行某些操作,如设置代理,请求头等,而这些操作都是通过两个函数实现的:process_reques原创 2020-05-25 17:33:39 · 1121 阅读 · 1 评论 -
Python网络爬虫(二十一)——Request 和 Response
Requestclass Request(object_ref): def __init__(self, url, callback=None, method='GET', headers=None, body=None, cookies=None, meta=None, encoding='utf-8', priority=0, dont_filter=False, errback=None, flags=None, cb原创 2020-05-25 16:17:52 · 1713 阅读 · 0 评论 -
Python网络爬虫(二十)——Scrapy Shell
之前我们使用 Scrapy 简单实验了一下该框架,利用该框架确实使整个过程简单了很多,能够使用户更加专注于整体的实现而不是细枝末节。但是也有一点不太方便,就是在调试代码的代码的时候,需要等待较长的时间才能够看到结果,这也会影响整个开发的效率。而 Scrapy Shell 则可以部分解决该问题。Scrapy Shell启动打开终端 进入到 Scrapy 项目所在的目录,执行命令:scrapy shell domainname示例这里以下面的为例,简单说明 Scrapy Shell 的原创 2020-05-25 12:32:48 · 272 阅读 · 0 评论 -
Python网络爬虫(十九)——CrawlSpider
在之前 Scrapy 的基本使用当中,spider 如果要重新发送请求的话,就需要自己解析页面,然后发送请求。而 CrawlSpider 则可以通过设置 url 条件自动发送请求。CrawlSpider 是 Spider 的一个派生类,相对于 Spider 来说,功能进行了更新,使用也更加方便。CrawlSpider创建 CrawlSpider和之前创建 spider 一样,虽然可以在创建 Scrapy 项目之后手动构造 spider,但是 Scrapy 也给出了在终端下创建 CrawlSp原创 2020-05-25 11:51:17 · 1093 阅读 · 0 评论 -
Python网络爬虫(十八)——Scrapy基本使用
因为 Scrapy 作为爬虫的一个工具来说功能比较强大,这里会分几篇文章来说明。创建项目Scrapy 的项目构建是通过终端完成的,在要放置项目的目录下执行:scrapy startproject projectname此时就在终端当前的目录下创建了名为 projectname 的项目。项目结构项目构建后,会自动生成一系列文件,这些文件共同构成了该爬虫项目,文件主要有:items.py:用来存放爬虫获取的数据模型,也就是事先对数据结构进行定义middlewares.py:用来原创 2020-05-25 08:42:36 · 523 阅读 · 0 评论 -
Python网络爬虫(十七)——Scrapy架构
概述对于爬虫来说,整个爬虫包括了网络请求、数据解析、数据请求、设置代理、多线程等内容,这些部分在之前的内容中都分别进行了说明。因此如果在之前要完成一个爬虫的话,就要使用上面提到的所有工具,从头开始一步一步构建自己的爬虫,这无疑是一项繁琐的工作,而 Scrapy 解决了这个问题。Scrapy 则实现了上边的所有功能,Scrapy 通过将基本的功能进行封装,从而提高了开发的效率。而正是因为它强大的功能,使得它也区别于之前提到的实现某一项功能的工具。这里先说明 Scrapy 框架。数据流上边红原创 2020-05-24 20:56:46 · 466 阅读 · 0 评论 -
Python网络爬虫(十六)——Tesseract
对于用户来说,当然希望自己的爬虫能够爬取到自己想要的资源,但是对于服务来说,有时候却并不希望自己服务器上的资源那么轻易的被爬虫获取到。因此就出现了反爬虫,图形验证码就是这样一种机制。各种验证码可以说是判断操作者是人还是机器的一个重要手段,而光学文字识别(Optical Character Recognition,OCR)可以或多或少解决这个问题。TesseractTesseract 是一个 OCR 库,通过训练该库可以识别任何字体。安装该项目的 github 地址为:https://gi原创 2020-05-24 17:59:48 · 354 阅读 · 0 评论 -
Python网络爬虫(十五)——Selenium
AJAX对于静态网页来说,在你发出请求的时候会请求全部的资源,而对于网页资源涉及较多,有一部分资源加载较慢的网页来说,等所有的资源全部加载完毕之后才显示整个网页的策略则会大大影响用户的使用。而动态网页则可以避免这个问题。异步 JavaScript 和 XML(Asynchronouse JacaScript and XML)能够在后台与服务器进行少量的数据交换,从而可以使网页实现异步更新,这样就可以在不重新加载整个页面的情况下,对网页的数据进行更新,通过 AJAX 加载的数据可以通过 JSON 将数原创 2020-05-24 10:42:37 · 383 阅读 · 0 评论 -
Python网络爬虫(十四)——threading
简介对于爬取图片或者爬取章节数目过多的小说来说,采取同步的方式进行下载会导致效率的下降,这对于网络爬虫来说是一个很大的缺陷。而使用多线程则可以避免这个问题,提高整个爬取过程的效率。多线程(multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。threadingthreading 是 python 中用来进行多线程的一个模块。基本使用import threadingi原创 2020-05-24 00:15:28 · 717 阅读 · 0 评论 -
Python网络爬虫(十三)——MongoDB
简介MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。启动 MongoDB将 MongoDB 制作为 Windows 服务启动 MongoDB 之后,如果需要一直使用 MongoDB 的服务,该终端就不能关闭,而且在启动的时候需要指定 data 的路径,这是有点麻烦的。而通过将之制作成 Windo.原创 2020-05-23 22:05:28 · 603 阅读 · 0 评论 -
Python网络爬虫(十二)——MySQL
简介MySQL 是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。GUI有时候使用 cmd 进行数据库操作不太方便,因此会借助于 GUI 来进行数据库的编辑和修改,常见用于 MySQL 的 GUI 工具有 workbench 和 navicat,前者是官方出的 GUI。python 库如果我们想要将爬取到的数据以数据库的形式存储时,就需要 python 和 MySQL 的连接。常见的驱动 MySQL 的 pyt原创 2020-05-22 13:53:51 · 667 阅读 · 0 评论 -
Python网络爬虫(十一)——csv
简介逗号分隔值(Comma-Separated Values,csv),有时也称为字符分隔值,因为分隔字符也可以不是逗号 逗号分隔值文件以纯文本形式存储表格数据 CSV 文件由任意数目的记录组成,记录间以某种换行符分隔 每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符 通常,所有记录都有完全相同的字段序列 CSV 文件格式的通用标准并不存在,但是在 RFC 4180 中有基础性的描述 使用的字符编码同样没有被指定,但是 bitASCII 是最基本的通用编码读写文原创 2020-05-21 20:55:03 · 540 阅读 · 0 评论 -
Python网络爬虫(十)——json
简介JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它是基于 ECMAScript(欧洲计算机协会制定的 js 规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。json 主要的优点有:层次结构简洁清晰 易于阅读和编写 易于机器解析和生成 网络传输效率高JSON 数据格式对象:以‘{’开始,以‘}’结束,和 python 中的字典类似 数组:以‘[’开始,以‘]’结束,和 python 中的列表类似 整型、浮点型、布尔类.原创 2020-05-21 19:24:41 · 1108 阅读 · 0 评论 -
Python网络爬虫(九)——re
正则表达式正则表达式(Regular Expression)是一种文本模式,包括普通字符(如 a-z)和特殊字符(元字符) 正则表达式使用单个字符串来描述,用来匹配一系列满足某个句法规则的字符串匹配规则匹配某个字符串import retext = 'hello'ret = re.match('he',text)print(ret.group())结果为:he匹配任意字符(.)import retext = "ab"ret = re.match('.',te原创 2020-05-21 16:50:36 · 588 阅读 · 0 评论 -
Python网络爬虫(八)——CSS选择器
CSS层叠样式表(Cascading Style Sheets,CSS)是一种用来表现 XML/HTML 等文件样式的计算机语言。CSS 不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页个元素进行格式化。CSS 能够对网页中元素位置的排版进行像素级的精确控制,支持几乎所有的字体字号样式,拥有对网页对象和模型样式编辑的能力。CSS 选择器而使用 CSS 选择器可以对 HTML 页面总的元素实现一对一、一对多或者多对多的控制。每一条 CSS 样式定义由两部分构成:[cod原创 2020-05-21 14:35:10 · 878 阅读 · 2 评论 -
Python网络爬虫(七)——BeautifulSoup4
简介BeautifulSoup4 也是一个 XML/HTML 的解析器,能够解析和提取 XML/HTML 数据。与基于 lxml 的局部遍历不同,BeautifulSoup4 则是基于 DOM(Document Object Model),一般会载入整个文档,解析整个 DOM 树,因此与 lxml 相比,BeautifulSoup4 解析时的时间和内存开销都会大的多。BeautifulSoup4 在解析 XML 之外,还支持 CSS 选择器,Python 中的 HTML 解析器和 lxml 中的原创 2020-05-19 00:57:02 · 475 阅读 · 0 评论 -
Python网络爬虫(六)——lxml
XpathXpath即为 xml 路径语言(XML Path Language),它是一种用来确定 XML 文档中某部分位置的语言,能够对 XML/HTML 文档中的元素进行遍历和查找。示例 HTML 片段<?xml version="1.0" encoding="UTF-8"?> <bookstore> <book> <title lang="eng">Harry Potter</title> <price&.原创 2020-05-18 21:47:50 · 818 阅读 · 0 评论 -
Python网络爬虫(五)——requests
requests 也是用于发起网络请求的一个 python 库。大致的逻辑差不多,接口可能有区别。发送 get 请求def get(url, params=None, **kwargs): r"""Sends a GET request. :param url: URL for the new :class:`Request` object. :param params: (optional) Dictionary, list of tuples or bytes to原创 2020-05-16 23:00:24 · 939 阅读 · 0 评论 -
Python网络爬虫(四)——urllib
本篇文章主要介绍 urllib 库相关函数的使用。urllib 能够模拟浏览器进行网络请求,也能够对服务器返回的数据进行保存。urllib 主要包括几个模块:模块 描述 urllib.request 打开和读取 URL urllib.error 包含 urllib.request 引发的异常 urllib.parse 解析 URL urllib.robotparser 解析 robots.txt 文件 常用函数在 urllib 库中,主要用到的函原创 2020-05-16 16:39:18 · 861 阅读 · 0 评论 -
Python网络爬虫(三)——chrome浏览器
使用爬虫爬取网络的数据,一般需要对网页进行分析,而直接使用浏览器可以说是最方便的了,比如使用 chrome 浏览器就可以查看网络请求和发送的参数。在 chrome 浏览器中右键->检查或者 F12 就可以打开开发者选项:在上边的各个选项中,常用的主要有:Elements:表示构成该网页的源代码 Console:表示网页的控制台 Sources:组成这个网页的所有源文件 Network:表示加载该页面的时候,浏览器所发送的所有请求...原创 2020-05-13 21:55:16 · 999 阅读 · 0 评论 -
Python网络爬虫(二)——http/https 协议
自上篇爬虫文章写完之后,好长时间都没有再写爬虫相关的了,这次重新回顾了一下爬虫的相关内容,一并记在这里。有的东西之前虽然已经写过了,但是再废话一遍。http/https 协议HTTP(Hypertext Transfer Protocol,超文本传输协议):是一种发布和接受 HTML 网页的方法,服务器端口号为 80 端口。HTTPS(Hypertext Transfer Protocol over SecureSocket Layer,超文本传输安全协议):相比较于 HTTP 来说,HTT原创 2020-05-13 21:41:02 · 1353 阅读 · 0 评论 -
Python网络爬虫(一)——什么是爬虫
什么是网络爬虫?网络爬虫(Web crawler)一般被用来采集网络上的信息,也叫做网络铲(Web scraper),网络蜘蛛(Web spider)。顾名思义,网络爬虫就是先爬到要采集的网页上,然后对数据信息进行采集。需要什么步骤?1. 了解爬虫的工作原理2. http抓取工具3. 高级功能相关概念1. 互联网简介互联网最早是作为科研信息的一种交流方式,而现在互联...原创 2020-01-18 21:10:07 · 1051 阅读 · 0 评论