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

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

利用网络爬虫,我们可以搜集文本,图片以及其他类型的数据。而这些事情,并不需要通过你要访问的网站提供官方的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

python如何全网爬取_如何通过Python爬取互联网相关推荐

  1. python爬虫携程酒店_携程酒店爬取分享

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 import urllib.request from bs4 import BeautifulSoup import csv import re def ...

  2. python爬虫编程100例_哪种Python程序员最赚钱?爬虫数据告诉你!

    世界上有三种宝贵的东西: 知识.粮食和友谊. 那么,1 块钱,你能买到什么呢? 骑一次共享单车 买 2 包辣条 1/190 件格子衬衫 1/299 支口红 1/10099 个 iPhone XS 但是 ...

  3. python交互式编程在哪里_终于明了python交互式编程入门

    Python是一款功能强大的脚本语言,具有丰富和强大的库,重要的是,它还具有很强的可读性,易用易学,非常适合编程初学者入门.以下是小编为你整理的python交互式编程入门 环境配置:下载Python并 ...

  4. python开发12306抢票_如何利用 Python 实现12306抢票?

    生苦短,我用 python. 作为一种"胶水语言",python 为无数码农带来了便利:同时,越来越多的 python 工程师被标榜为"高薪党":"全 ...

  5. python能超越java吗_為什么Python能超越JAVA,有什么優勢?

    最近幾年Python編程語言在國內引起不小的轟動,有超越Java之勢,本來在美國這個編程語言就是最火的,應用的非常非常的廣泛,而Python的整體語言難度來講又比Java簡單的很多.尤其是在運維的應用 ...

  6. python哪个方向工资高_学完Python的7大就业方向,哪个赚钱多?

    " 我想学Python,但是学完Python后都能干啥 ?" " 现在学Python,哪个方向最简单?哪个方向最吃香?" " -- " 相信 ...

  7. python哪个方向工资高_学完Python的7大就业方向,哪个行业才能赚钱多?

    " 我想学Python,但是学完Python后都能干啥 ?"" 现在学Python,哪个方向最简单?哪个方向最吃香 ?"相信不少Python的初学者,都会遇到上 ...

  8. python游戏小项目简单_[简单学Python] 通过一个小游戏完成Python入门[2]变量和赋值...

    变量和赋值 到这里,你已经成功地打印出了千寻的名字和卖身契.与此同时,千寻也成为了汤婆婆的工人,渐渐地,她忘记了自己是谁,遗失了自己"姓名"的信息. 那么,在信息纷繁的代码世界里, ...

  9. python 菜鸟联盟快递查询_菜鸟联盟python

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! python3 生信上手版推荐大土豆力,公众号:生信菜鸟团生信分析方向如何系统入 ...

  10. python的设计理念和应用_菜鸟爱Python第1期:Python发展史?对Python最深刻的解读...

    这是胜天半子的第1篇原创. 前言 也许你不是一名程序员,也许你甚至都不是做IT行业的,但你的定位只要不是被时代所抛弃的老年人,你,多多少少应该听过"Python"一词,多多少少看到 ...

最新文章

  1. Java EE 7:新增功能???
  2. 我们在面临种种不良的飞鸽传书2012
  3. 仅信用卡大小,性能比TX2强15倍,英伟达边缘AI计算新品Jetson Xavier NX
  4. oracle dblink和dataguard,Oracle 建立 DBLINK
  5. [置顶] android 自定义圆角ImageView以及锯齿的处理
  6. 2017 校赛 问题 B: CZJ-Superman
  7. luogu P1015 回文数
  8. stm32 整数加法循环时间_剑指 Offer 65. 不用加减乘除做加法 leetcode 剑指offer系列...
  9. cad道路里程桩号标注_CAD道路桩号自动编号插件
  10. riskv的linux模拟环境,开启你RISC-V的开发之旅-RISC-V的linux模拟环境搭建整理和总结-EDA365电子论坛通信数码-人工智能-计算机-半导体-手机家电消费电子硬件门户网站...
  11. 计算机网络笔记(一):网络基本构成
  12. ArcGIS地理配准、影像校正步骤
  13. NavigationDuplicated: Avoided redundant
  14. 【DirectX学习笔记】01_D3D初始化准备-基本绘图概念
  15. Selenium元素定位神器工具谷歌浏览器插件-SelectorsHub介绍、安装和使用
  16. 手机java update_手机里的java菜单老是自动更新为什么啊
  17. QCM2290 充电指示灯 —— CHG_LED_SINK
  18. Opencv人数统计 yolo kcf人头跟踪 人数统计 KCF目标跟踪 YOLO目标跟踪
  19. VGG16-好莱坞明星识别
  20. 建立RADIUS认证服务器

热门文章

  1. python语言基础实验_实验二Python语言基础函数包练习.doc
  2. 贪婪洞窟2服务器维护,《贪婪洞窟2》11月30日更新维护多久 贪婪洞窟2更新维护公告...
  3. java not a jpeg file_javax.imageio.IIOException: Not a JPEG file: starts with 0x47 0x49
  4. C++ open 打开文件
  5. SQLServer查找已知数相邻前后数
  6. 达尔豪西大学 计算机科学,达尔豪西大学计算机科学硕士专业.pdf
  7. red flag linux指定域名,Red Flag Server 4.1 系统管理手册(适用桌面linux4.1) 6
  8. rhce考试试题以及答案_搞懂这套五年级数学上册期末考试试题(含答案),考试不担心...
  9. 内网中入侵linux系统,MSSQL 入侵提权之内网渗透案例分析
  10. js预览本地word文档_Github+docsify打造在线文档