python爬取网页数据软件_python爬虫入门10分钟爬取一个网站

一、基础入门

1.1什么是爬虫

爬虫(spider,又网络爬虫),是指向网站/网络发起请求,获取资源后分析并提取有用数据的程序。

从技术层面来说就是 通过程序模拟浏览器请求站点的行为,把站点返回的HTML代码/JSON数据/二进制数据(图片、视频) 爬到本地,进而提取自己需要的数据,存放起来使用。

1.2爬虫基本流程

用户获取网络数据的方式:

方式1:浏览器提交请求--->下载网页代码--->解析成页面

方式2:模拟浏览器发送请求(获取网页代码)->提取有用的数据->存放于数据库或文件中

爬虫要做的就是方式2。

1

发起请求Python入门到实践学习教程请加群

使用http库向目标站点发起请求,即发送一个Request

Request包含:请求头、请求体等219539519零基础,进阶欢迎加入

Request模块缺陷:不能执行JS 和CSS 代码

2

获取响应内容

如果服务器能正常响应,则会得到一个Response

Response包含:html,json,图片,视频等

3

解析内容

解析html数据:正则表达式(RE模块)、xpath(主要使用)、beautiful soup、css

解析json数据:json模块

解析二进制数据:以wb的方式写入文件

4

保存数据

数据库(MySQL,Mongdb、Redis)或 文件的形式。

1.3http协议 请求与响应

http协议

Request:用户将自己的信息通过浏览器(socket client)发送给服务器(socket server)

Response:服务器接收请求,分析用户发来的请求信息,然后返回数据(返回的数据中可能包含其他链接,如:图片,js,css等)

ps:浏览器在接收Response后,会解析其内容来显示给用户,而爬虫程序在模拟浏览器发送请求然后接收Response后,是要提取其中的有用数据。

1.3.1

request

(1) 请求方式

常见的请求方式:GET / POST

(2)请求的URL

url全球统一资源定位符,用来定义互联网上一个唯一的资源 例如:一张图片、一个文件、一段视频都可以用url唯一确定

(3)请求头

User-agent:请求头中如果没有user-agent客户端配置,服务端可能将你当做一个非法用户host;

cookies:cookie用来保存登录信息

注意:一般做爬虫都会加上请求头。

请求头需要注意的参数:

Referrer:访问源至哪里来(一些大型网站,会通过Referrer 做防盗链策略;所有爬虫也要注意模拟)

User-Agent:访问的浏览器(要加上否则会被当成爬虫程序)

cookie:请求头注意携带

(4)请求体

请求体 如果是get方式,请求体没有内容 (get请求的请求体放在 url后面参数中,直接能看到) 如果是post方式,请求体是format data

ps:1、登录窗口,文件上传等,信息都会被附加到请求体内 2、登录,输入错误的用户名密码,然后提交,就可以看到post,正确登录后页面通常会跳转,无法捕捉到post

1.3.2

response

(1)响应状态码

200:代表成功

301:代表跳转

404:文件不存在

403:无权限访问

502:服务器错误

(2)response header

响应头需要注意的参数:Set-Cookie:BDSVRTM=0; path=/:可能有多个,是来告诉浏览器,把cookie保存下来

(3)preview就是网页源代码

json数据

如网页html,图片

二进制数据等

02

二、基础模块

2.1requests

requests是python实现的简单易用的HTTP库,是由urllib的升级而来。

开源地址:

https://github.com/kennethreitz/requests

中文API:

http://docs.python-requests.org/zh_CN/latest/index.html

2.2re 正则表达式

在 Python 中使用内置的 re 模块来使用正则表达式。

缺点:处理数据不稳定、工作量大

2.3XPath

Xpath(XML Path Language) 是一门在 XML 文档中查找信息的语言,可用来在 XML 文档中对元素和属性进行遍历。

在python中主要使用 lxml 库来进行xpath获取(在框架中不使用lxml,框架内直接使用xpath即可)

lxml 是 一个HTML/XML的解析器,主要的功能是如何解析和提取 HTML/XML 数据。

lxml和正则一样,也是用 C 实现的,是一款高性能的 Python HTML/XML 解析器,我们可以利用之前学习的XPath语法,来快速的定位特定元素以及节点信息。

2.4BeautifulSoup

和 lxml 一样,Beautiful Soup 也是一个HTML/XML的解析器,主要的功能也是如何解析和提取 HTML/XML 数据。

使用BeautifulSoup需要导入bs4库

缺点:相对正则和xpath处理速度慢

优点:使用简单

2.5Json

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。适用于进行数据交互的场景,比如网站前台与后台之间的数据交互。

在python中主要使用 json 模块来处理 json数据。Json解析网站

2.6threading

使用threading模块创建线程,直接从threading.Thread继承,然后重写__init__方法和run方法

03

三、方法实例

3.1get方法实例

demo_get.py

3.2post方法实例

demo_post.py

3.3添加代理

demo_proxies.py

3.4获取ajax类数据实例

demo_ajax.py

3.5使用多线程实例

demo_thread.py

04

四、爬虫框架

4.1Srcapy框架

Scrapy是用纯Python实现一个为了爬取网站数据、提取结构性数据而编写的应用框架,用途非常广泛。

Scrapy 使用了 Twisted['twɪstɪd](其主要对手是Tornado)异步网络框架来处理网络通讯,可以加快我们的下载速度,不用自己去实现异步框架,并且包含了各种中间件接口,可以灵活的完成各种需求。

4.2Scrapy架构图

4.3Scrapy主要组件

Scrapy Engine(引擎): 负责Spider、ItemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等。

Scheduler(调度器): 它负责接受引擎发送过来的Request请求,并按照一定的方式进行整理排列,入队,当引擎需要时,交还给引擎。

Downloader(下载器):负责下载Scrapy Engine(引擎)发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine(引擎),由引擎交给Spider来处理,

Spider(爬虫):它负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器),

Item Pipeline(管道):它负责处理Spider中获取到的Item,并进行进行后期处理(详细分析、过滤、存储等)的地方.

Downloader Middlewares(下载中间件):你可以当作是一个可以自定义扩展下载功能的组件。

Spider Middlewares(Spider中间件):你可以理解为是一个可以自定扩展和操作引擎和Spider中间通信的功能组件(比如进入Spider的Responses;和从Spider出去的Requests)

4.4Scrapy的运作流程

引擎:Hi!Spider, 你要处理哪一个网站?

Spider:老大要我处理xxxx.com。

引擎:你把第一个需要处理的URL给我吧。

Spider:给你,第一个URL是xxxxxxx.com。

引擎:Hi!调度器,我这有request请求你帮我排序入队一下。

调度器:好的,正在处理你等一下。

引擎:Hi!调度器,把你处理好的request请求给我。

调度器:给你,这是我处理好的request

引擎:Hi!下载器,你按照老大的下载中间件的设置帮我下载一下这个request请求

下载器:好的!给你,这是下载好的东西。(如果失败:sorry,这个request下载失败了。然后引擎告诉调度器,这个request下载失败了,你记录一下,我们待会儿再下载)

引擎:Hi!Spider,这是下载好的东西,并且已经按照老大的下载中间件处理过了,你自己处理一下(注意!这儿responses默认是交给def parse()这个函数处理的)

Spider:(处理完毕数据之后对于需要跟进的URL),Hi!引擎,我这里有两个结果,这个是我需要跟进的URL,还有这个是我获取到的Item数据。

引擎:Hi !管道 我这儿有个item你帮我处理一下!调度器!这是需要跟进URL你帮我处理下。然后从第四步开始循环,直到获取完老大需要全部信息。

管道``调度器:好的,现在就做!

4.5制作Scrapy爬虫4步曲

1新建爬虫项目scrapy startproject mySpider2明确目标 (编写items.py)打开mySpider目录下的items.py3制作爬虫 (spiders/xxspider.py)scrapy genspider gushi365 "gushi365.com"4存储内容 (pipelines.py)设计管道存储爬取内容

五、常用工具

5.1fidder

fidder是一款抓包工具,主要用于手机抓包。

5.2XPath Helper

xpath helper插件是一款免费的chrome爬虫网页解析工具。可以帮助用户解决在获取xpath路径时无法正常定位等问题。

谷歌浏览器插件xpath helper 的安装和使用:

06

六、分布式爬虫

6.1scrapy-redis

Scrapy-redis是为了更方便地实现Scrapy分布式爬取,而提供了一些以redis为基础的组件(pip install scrapy-redis)

6.2分布式策略

Master端(核心服务器) :搭建一个Redis数据库,不负责爬取,只负责url指纹判重、Request的分配,以及数据的存储

Slaver端(爬虫程序执行端) :负责执行爬虫程序,运行过程中提交新的Request给Master

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/305234.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

国庆中秋活动——读完这两套书,宝宝就变小小物理学家了!

通知!通知!通知!!!玩酷屋十一黄金优惠限时限量秒杀活动,能抢到算你厉害:1、活动期间 2017/10/02 22:30 ——2017/10/05 22:302、【宝宝的物理学】第一辑 原价:189元,秒…

java的正则表达式 CPU_小心踩雷!一个小小的正则表达式竟把CPU拖垮......

原标题:小心踩雷!一个小小的正则表达式竟把CPU拖垮......“前几天线上一个项目监控信息突然报告异常,上到机器上后查看相关资源的使用情况,发现 CPU 利用率将近 100%。通过 Java 自带的线程 Dump 工具,我们导出了出问题…

欲善其事,先利其器 | IDCF第6期DevOps案例研究回顾(附视频)

2021年,会有哪些“意想不到”在等待我们?2021年,会有哪些“变与不变”在等待我们?这些,都未可知。借假修真,唯一可知的是过去有哪些值得我们借鉴与学习,并帮助我们更好前进的经验。2021年开端&a…

ArcGIS中的投影和坐标转换

ArcGIS中的投影和坐标转换 1 ArcGIS中坐标系统的定义 一般情况下地理数据库(如Personal GeoDatabase的 Feature DataSet 、Shape File等)在创建时都具有空间参考的属性,空间参考定义了该数据集的地理坐标系统或投影坐标系统,没有…

电脑任务管理器快捷键_电脑知识小常识

0、计算机专业的学生的电脑常识未必有你多,电脑坏了找他们没用。1、重启。不管啥问题,上来就是重启。2、找一个学过计算机的来重启。3、还不行就让那个学过计算机的给你重装个系统。4、再不行就换个电脑吧。5、妹子可以忽视以上规则,直接找计…

大数据迁徙图:逃离北上广,他们竟然去了这里!

“做出这个决定,我们考虑了很久。”不久前,高铭离开了工作生活12年的北京,举家回到故乡重庆。“重庆房价比北京便宜得多,孩子上学的问题也好解决。”高铭的经历并非个案。最近几年,“逃离北上广”成为经久不衰的热门话…

python绘制蟒蛇绕圈圈_Python学习之循环--绕圈圈(蛇形盘)

效果图:注意哦,右边多出来的一点不是程序有问题,是打印的时候我用的\t,但100,三个字符顶格的时候给顶出去的,我太懒了,不想再调输出格式了,就这么凑合看吧实现代码:sum …

内存缓存MemoryCache

内存缓存MemoryCache实现了ICache接口,Redis同样实现了ICache接口,两者在缓存操作上达到了高度抽象统一。应用设计时一律使用ICache接口,开发环境装配为MemoryCache,生产环境根据分布式需要可以装配为Redis。如果应用系统没有分布…

quicktype游戏java程序_使用QuickType工具从json自动生成类型声明代码

一、QuickType 工具功能简介QuickType 是一款可以根据 json 文本生成指定语言(如 Type Script,C,,Java,C#,Go 等)类型声明代码的工具。例如我们在写接口调用处理收到响应数据的逻辑时一般分为如下两步: 1.根据接口返回…

endpointimpl怎么填参数_这是一篇VLOOKUP函数家族主要用法的合集,XLOOKUP来了!真香!但是,没有office365吃不着怎么办?...

最近这几个月,XLOOKUP震惊了Excel界,传言三头六臂无所不能,一个人把LOOKUP全家兄弟姐妹的活都给抢了。最开始我是不以为意的,但是相关的信息越来越多,我终于忍不住,今天去买了一套office365,发现…

1个月教你学会用Python实现机器学习

什么是机器学习?在最简单的层面上,机器学习只是优化数学方程式的过程。有几种不同的机器学习,都有不同的目的。机器学习中最流行的两种形式是监督学习和无监督的学习。 我们将在下面介绍他们的工作原理:. 监督学习:监督…

ASP.NET Core 5 在IIS,Nginx,Caddy下的性能测试

点击上方蓝字关注“汪宇杰博客”导语ASP.NET Core 从 2.2 版本起,在 IIS 下可以使用 InProcess 模式提高性能,国外大神 Rick Strahl 对此有一片详细的文章。3年过去了,现在 ASP.NET Core 已经到了 5.0 版本,不同服务器之间的性能有…

sql两个表查不同数据_产品操作MySQL第6篇 – 数据过滤-WHERE子句

MYSQL本资料为产品岗位作为日常工作参考,语言口语化At 2019/4/26 By David.Yang如何使用限定条件来进行数据过滤?在前问当中,我们已经学会到了SELECT查询,在过程当中多次接触了WHERE这个关键词,打过预防针应该知道他就…

gesturedetector.java_android使用gesturedetector手势识别示例分享

public class MyGestureLintener extends SimpleOnGestureListener {private Context context;public MyGestureLintener(Context context) {super();this.context context;}// 单击,触摸屏按下时立刻触发/*Overridepublic boolean onDown(MotionEvent e) {// TODO…

SQL SERVER 2005 同步复制技术

以下实现复制步骤(以快照复制为例)运行平台SQL SERVER 2005 一、准备工作:1.建立一个 WINDOWS 用户,设置为管理员权限,并设置密码,作为发布快照文件的有效访问用户。 2.在SQL SERVER…

【分享】C# 字节帮助类 ByteHelper

【分享】C# 字节帮助类 ByteHelper独立观察员 2021 年 2 月 3 日本文分享一个 C# 的字节(Byte)帮助类(ByteHelper),主要是一些字节、字节数组、十六进制、十六进制字符串等之间的转换操作,适用场景包括但不…

win10必须禁用的服务_【亲测】Win10系统如何彻底禁止自动更新 亲测有效的Win10关闭自动更新方法...

昨天有人称Win10系统更新依然无法彻底关闭,今天再来补充一下,肯定可以!不少用户反映自己的Win10系统更新无法彻底关闭,网上提供的关闭Win10更新的教程,关闭之后还是会自动更新Win10系统,而今天装机之家分享…

python怎么读数据库的数据_python从数据库读取出来的字典怎么更加方便的插入数据库...

其他的SQL不清楚, pymysql是没有类似函数的。说到框架,python常用的几个ORM, 我印象中也没有提供类似写法的。既然没人写,而你又在php里觉得这么用趁手,不如自己按php的思路实现一个。我自己写了个database类和一些工具函数, 你说的逻辑在我这…

国庆中秋活动——超强AR/3D地球仪!带你领略世界风光!我们未必能环游世界,但都该有个地球仪

通知!通知!通知!!! 玩酷屋十一黄金优惠限时限量秒杀活动,能抢到算你厉害: 1、活动期间 2017/10/03 22:30 ——2017/10/06 22:30 2、【北斗AR地球仪】原价 299元,秒杀活动价 269元…

flask mysql项目模板渲染_21. Flask 模板 - 宏、继承、包含

宏的概念类似于python中的函数,宏的作用就是在模板中重复利用代码,避免代码冗余。Jinja2支持宏,还可以导入宏,需要在多处重复使用的模板代码片段可以写入单独的文件,再包含在所有模板中,以避免重复。简单定…