python如何全网爬取_如何通过Python爬取互联网

大家用过谷歌,百度吧。这类搜索引擎是怎么对外提供服务的呢?显然,这不是本文要说的事情。但是,任何一个搜索引擎,都缺不了网页收录这个步骤,所以网络爬虫是搜素引擎最重要,也是最基本的组成部分。那么我们每个人其实都可以写一个简单的网络爬虫,用来爬你自己喜欢的东西,你懂的。那么,我们就废话少说,开始吧。

网络爬虫(网络蜘蛛)经常被人们认为是一项特别强大而实用的工具,用来从网上搜集各种不同的数据。其实它的本质就是通过编程的手段来访问一系列不同的网页并抽取页面中的数据信息。

利用网络爬虫,我们可以搜集文本,图片以及其他类型的数据。而这些事情,并不需要通过你要访问的网站提供官方的API,你只需要模拟浏览器的行为来达到这个简单的目的。

在这里,你会了解到网络爬取信息的基本概念和组成部分。我们也会用Quotes to Scrape(http://quotes.toscrape.com/)作为例子来了解如何抽取这个网站上面我们所关心的数据。跟着一路走下来,你会完成一个简单的网络爬虫,它的功能就是爬取Quotes to Scrape(http://quotes.toscrape.com/)的页面,并且抽取我们所关心的数据。

热身,热身

既然安装完了Python,下面就来看看,如何创建一个简单的爬虫。创建爬虫有好多方式,条条大路通罗马。但是,我们想走效率高的,不绕弯的,不掉坑里的一条路。开源社区有很多不错的选择,在这里,我选用的是Scrapy框架。Scrapy帮助我们解决了绝大部分的繁琐事情,让我们真正专注于要关心的逻辑,也就是你要爬取哪些页面,抽取哪些数据,并如何存储它们。

如何安装Scrapy?非常简单,打开Shell或者命令行窗口,运行下面的命令

$pip install scrapy

如上图所示,Scrapy安装成功了。我们可以运行一个简单的命令,来检验一下Scrapy是否可以正常工作。运行如下命令,是否返回HTML的内容。

如果能够返回HTML页面的信息,则说明scrapy工作正常。接下来,我们可以创建一个文件夹,用来保存我们的爬虫类。运行下面的命令,创建一个文件夹

$mkdir scrapy-spiders

进入你刚创建的文件夹

$cd scrapy-spiders

创建一个新的Python文件(用你自己喜欢的文本编辑器,我这里用的是VIM),文件名称叫quotespider.py。

$vim quotespider.py

我们通过创建一个scrapy.Spider的派生类,来达到简化繁琐工作的目的。大部分的工作已经被包含在scrapy.Spider这个类当中了,这个类是scrapy框架提供的。我们需要修改其中的属性,就可以达到自定义的目的。这里,我们为了简化和演示的目的,仅仅修改两个属性,name和start_urls。

name--- 给你的网络爬虫起一个名字

start_urls--- 网络爬虫从哪个网址开始爬取,可以是一个网址,也可以是一批网址

修改之后的quotespider.py文件内容如下:

让我们简单地逐行说明一下程序代码的意思。首先,我们在程序第一行中引入scrapy框架。然后,我们在第二行创建了一个名字叫做QuoteSpider的类。这个类是scrapy.Spider的子类。接着,我们在第三行,第四行修改了name和start_urls的属性。好啦,我们第一步的任务结束啦。现在可以运行一下,看看结果是什么。

大家看到红线的部分,返回值是200,证明我们成功地爬取了网址。但是,下面有错误,原因是蓝线的部分造成的。下面将在第二部分修正这个部分。实现一个parse的方法,来告诉爬虫,当成功爬取了网址之后,我们需要如何解析这个网页的内容。也就是如何抽取页面当中我们关心的数据。

在实现如何解析页面之前,让我们看一下页面的结构,从而发现在哪里可以找到我们关心的数据。借助Chrome的开发者工具,我们可以定位到我们需要抽取的信息节点的位置。假设我要抽取每段的名句,并不关心作者是谁。

用开发者工具,我找到了这个信息在HTML文档DOM树中的结点位置。

那么我就可以用scrapy框架自带的CSS或者XPath选择器,来选中我关心的结点,然后读取里面的文本值。修改之后的quotespider.py文件内容为

运行一下程序,结果如下

假如,进一步我们需要把作者信息也抽取出来,那么我们只需要再多加一行代码,来读取作者的信息。

运行结果就会包含作者信息了。

到目前为止,你已经会爬取一个单独的页面,并且可以抽取你想要的信息了。如果我们想抽取的信息是保存在页面中某个超链接里面呢?那就需要进一步访问那个超链接去获得进一步的信息。下一步介绍如果继续访问页面中的超链接,你其实也应该想得到,跟访问一个页面是同样的。只需要获得那个超链接的网址,爬取那个页面,并按照刚才的步骤去解析网页就好了。

我们观察到每一句名言下面都有作者,作者的后面跟着一个超链接,用来介绍作者的详细信息。那么就可以通过CSS选择器选中超链接,并且访问那个超链接。对于超链接返回的页面,可以自定义一个专门用来解析作者详细信息的方法,叫做parse_author。那么,就很容易抽取我们想要的作者详细信息了。

下面是修改之后的quotespider.py文件内容

在代码中,可以看到通过".author+a::attr(href)"选中了超链接的相对地址,然后调用response.follow方法,并设置parse_author作为解析页面的方法。parse_author的方法内部,对三个页面标签做了抽取,他们是名字,出生日期和出生地点。运行一下程序,结果如下

从程序输出结果来看,我们成功的抽取了超链接的内容。根据这个思路,可以设计一个比较复杂的爬虫,来爬取这个网站的所有页面,并把相关的数据保存下来。

关于如何保存成不同类型的文件,而不是输出到shell或者控制台中,可以实用命令行参数-o,比如下面就是一个输出成JSON的例子。Scrapy还支持多种文件格式,比如csv,JSON Lines,XML。

$scrapy runspider quotespider.py -o crawlresult.json

到这里,就介绍完了如何创建一个简单的爬虫。

参考链接:

Scrapy Library: https://doc.scrapy.org/en/latest/intro/overview.html

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

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

相关文章

using(){},Close(),Dispose()的区别

//用Close(),Dispose()方式关闭连接 string connString "Data Source(local);Initial CatalogLinq;Integrated SecuritySSPI"; SqlConnection conn new SqlConnection(connString); conn.Open(); conn.Close(); conn.Dispose();//用using方式关闭连接 string connS…

python+selenium获取cookie session_Python Selenium模拟登录成功后,使用此cookie、利用requests库进行get时,提示“非法登陆”。...

一. 步骤概述a. 模拟登录学校选课系统(使用Selenium库登陆http://xk.suibe.edu.cn/xsxk/login.xk)b. 取得cookie后传入requests的session中。(参考博客:https://blog.csdn.net/big__v/article/details/78151940)c. 使用requests库中的post提交选课序号至http://xk.s…

python分类时特征选择_关于python:是否有可用于分类数据输入的特征选择算法?...

我正在训练一个具有10个左右分类输入的神经网络。 在对这些分类输入进行一次热编码之后,我最终将大约500个输入馈入网络。我希望能够确定我每个分类输入的重要性。 Scikit-learn具有许多功能重要性算法,但是这些算法中的任何一种都可以应用于分类数据输入…

java隐含转化_java中自动转换和强制转换还有隐含转换

匿名用户1级2016-08-29 回答转型被用来将一个数值从一种类型转换到另一种类型。下面的程序连续使用了三个转型。那么它到底会打印出什么呢?public class Multicast{public static void main (String[] args){System.out.println((int)(char)(byte) -1);}}无论你怎样…

一个域名解析到另一个域名_注册域名公司|教你如何注册一个.net域名

近几年各后缀域名注册量都在增加,很多行业知道线上业务平台搭建的重要性,都优先制作网站布局线上,建站肯定需要域名,所以这也是带动域名注册量上涨原因之一。.COM、.NET域名一直是建站注册域名首选,.COM域名大家可能相…

java jedis connect timed out_Java连接Redis connection timed out 报错的解决方法

Java连接Redis connection timed out 报错的解决方法踩坑场景在使用 RedisTemplate 连接 Redis 进行操作的时候,发生了如下报错:报错信息如下:Caused by: io.netty.channel.ConnectTimeoutException: connection timed out: /192.168.73.10:6…

python自动保存ping结果_利用python获取Ping结果示例代码

前言本文主要跟大家分享了关于利用python获取Ping结果的相关内容,分享出来供大家参考学习,下面话不多说,来一起看看详细的介绍吧。示例代码:# -*- coding: utf-8 -*-import subprocessimport redef get_ping_result(ip_address):p…

富文本存储型XSS的模糊测试之道

富文本存储型XSS的模糊测试之道 凭借黑吧安全网漏洞报告平台的公开案例数据,我们足以管中窥豹,跨站脚本漏洞(Cross-site Script)仍是不少企业在业务安全风险排查和修复过程中需要对抗的“大敌”。 XSS可以粗分为反射型XSS和存储型…

java join()用法_四种联系(join)的区别及用法

链接:作为动词,它表示将两个或多个表的内容结合在一起并产生一个结果集,该结果集对每个表的列和行进行合并。表的联接一般都使用它们共有的数据。例如,您可以对有一个共同 pub_id 列的 titles 表和 publishers 表联接,…

python无效的类字符串_Python基础-字符串处理

​你好,我是goldsunC让我们一起进步吧!字符串操作与处理字符串是编程语言中经常会遇见的东西,而字符串又和那些编程语句什么的不太一样,我们可能需要对一个字符串进行各种各样的处理,后面我将给出我整理的一些常用的对…

phpstorm xdebug配置

phpstorm 8.0.3版本 1.本身自带xdebug插件 2.在xampp的php.ini中最后中添加(如果有[XDebug]配置替换) [XDebug]zend_extension "D:\Program Files\xampp\php\ext\php_xdebug.dll";xdebug.profiler_append 0;xdebug.profiler_enable 1;xdebu…

php xml 返回 微信,php版微信返回用户text输入的方法

本文实例讲述了php版微信返回用户text输入的方法。分享给大家供大家参考,具体如下:获得用户输入的内容,并发回相同内容//获取post数据// $PostData $HTTP_RAW_POST_DATA;$PostData file_get_contents("php://input");//判断POST是…

python加密敏感信息_仅需10行代码,使用python加密用户敏感数据

原标题:仅需10行代码,使用python加密用户敏感数据数据分析师必须要遵守的一个规则就是数据保密,但在跨部门沟通的时候,难免会有数据泄露的情况,所以,对于用户的姓名、手机号、地址等敏感信息,一…

springmvc+ztree v3实现类似表单回显功能

在做权限管理系统时,可能会用到插件zTree v3,这是一个功能丰富强大的前端插件,应用很广泛,如异步加载菜单制作、下拉选择、权限分配等。在集成SpringMVC中,我分别实现了zTree的添删改查,本节主要实现类似表单回显功能。…

php数组基础知识,PHP 数组基础知识小结

php函数有很多,需要时查询api。/*#数组 没有限制大小:$arr[0]1;$arr[1]2; $arrarray("0","1");$list($num1,$num2)$arr;array range(int low,int high[,int step])low最小数,high最高数,step步长int array_unshift(array…

python通过跳板机连接服务器_使用pycharm、跳板机连接内网服务器

使用pycharm、跳板机连接内网服务器接手实验室服务器后,大部分同学在GPU集群上跑程序都是直接在ssh界面上跑,这里想着通过pycharm通过跳板机来连接服务器。总体就是实验室服务器仅限内网访问,同时实验室也提供了一个跳板机,可以先…

C语言事实上不简单:sizeof

问&#xff1a;C语言中一共同拥有多少个keyword&#xff1f; 答&#xff1a;32个。 答不上来的没关系。非常正常。我们玩的是程序的艺术。而不是背数字。只是这个特殊的数字1<<5也是非常好记的-.-。 问&#xff1a;sizeof是函数还是keyword&#xff1f; 第一次看到这个问…

php的可变函数,php之可变函数的实例详解

php之可变函数的实例详解php的可变函数&#xff0c;今天大概的了解下&#xff0c;是看php手册总结的&#xff0c;觉得用处不大&#xff1b;PHP 支持可变函数的概念。这意味着如果一个变量名后有圆括号&#xff0c;PHP 将寻找与变量的值同名的函数&#xff0c;并且尝试执行它。可…

Android应用安全开发之浅谈网页打开APP

一、网页打开APP简介 Android有一个特性&#xff0c;可以通过点击网页内的某个链接打开APP&#xff0c;或者在其他APP中通过点击某个链接打开另外一个APP&#xff08;AppLink&#xff09;&#xff0c;一些用户量比较大的APP&#xff0c;已经通过发布其AppLink SDK&#xff0c;开…

python history文件_【python之路19】文件操作

一、打开文件文件句柄 open(文件路径, 模式)打开文件时&#xff0c;需要指定文件路径和以何等方式打开文件&#xff0c;打开后&#xff0c;即可获取该文件句柄&#xff0c;日后通过此文件句柄对该文件操作。打开文件的模式有&#xff1a;r &#xff0c;只读模式【默认】w&…