c爬虫抓取网页数据(文章目录《Python网络爬虫Scrapy框架》-陈磊/主编)

优采云 发布时间: 2021-10-15 10:29

  c爬虫抓取网页数据(文章目录《Python网络爬虫Scrapy框架》-陈磊/主编)

  文章内容

  《Python 网络爬虫 Scrapy 框架》

  全文主要参考《Python Web Crawler Scrapy Framework》-肖瑞陈磊/主编-刘新杰王莹莹秦丽娟/人民邮电出版社副主编。

  本书章节列表如下

  

  通读前两章和本书章节列表。前四章可以使用。后续章节可能会用到Scrapy反爬技术和分布式爬虫Scrapy+Redis。谈未来,把握现在。

  第一章

  掌握4个概念:lxml库、xpath语法、多级网络爬取逻辑、数据存储与展示。

  用于解析 HTML 的库

  请求网页URL,获取到HTML源代码后,需要解析HTML源代码,得到想要的数据。lxml库是解析html的第三方库。

  Python标准库自带xml模块,可以解析xml文件和html页面的内容,但性能和界面不人性化。第三方库lxml由Cython实现,增加了很*敏*感*词*,大部分都存放在lxml.etree中。

  使用 lxml 库提取网页内容的步骤如下:

  导入对应的库: from lxml import etree

  使用HTML()方法生成要解析的对象:tree=etree.HTML(html),其中html为目标页面的html源代码

  调用待解析对象的xpath()方法tree.xpath(),填入xpath语句作为html解析的参数

  解析 XML/HTML 的语法

  xpath 是一组解析 XML/HTML 的语法,使用路径表达式来选择 xml/html 中的节点集。值得一提的是,编写xpath需要熟悉html元素。

  多级网络爬取逻辑

  页面嵌套问题:抓取一个网页的数据很容易,但是如何抓取网页的嵌套网页呢?即让爬虫定期爬取所有嵌套的详情页。

  这种情况涉及到爬虫的多级网络爬取逻辑。以二级网页为例,组织爬取逻辑:

  请求一级网页(目标数据为嵌套页面的链接)使用xpath解析网页,获取嵌套页面的链接,遍历嵌套页面链接,逐个发送请求,使用xpath解析二级网页,获取最终目标数据并保存目标数据

  这里应该有爬虫算法,比如Scrapy使用的深度优先算法,数据结构已经学会了,看深度优先算法和网络爬虫中的简单代码实现。

  保存数据和显示数据

  将 URL-Method-Params-Status-Title-Length 格式的数据保存为 csv 文件还是 txt 文件?后面还有问题需要考虑。您需要对这些目标资源进行分类吗?未分类的数据量太大,除非对每个URL的请求量进行压缩,或者分类,这些都是fuzzing时需要考虑的事情。

  目前我们只需要考虑保存数据的可读性,具体点就是阅读的舒适度。以后fuzz可能保存为txt或csv,但目前我个人更喜欢保存为py,因为编辑器读起来很舒服。

  参考csv、txt和tsv数据文件的异同,以及如何使用Python读取和生成: 一般来说,为了更好的处理多种语言的数据,建议将数据保存为csv格式(csv文件之间用逗号隔开)后缀可以直接改成其他类型的文件),可以同时在excle、python、matlab、sas、R等语言中自由切换,数据格式没有损坏!

  选择:将 URL-Method-Params-Status-Title-Length 格式的数据保存为 csv 文件。

  这一天即将结束。回顾那天,没有实质性的结果。编写爬虫是目标,其他一切都是假的。

  第 2 章垂直搜索爬虫

  根据使用场景,爬虫分为通用搜索爬虫和垂直搜索爬虫。垂直搜索爬虫在运行时尽量只爬取与需求相关的网页信息。这里主要使用垂直搜索爬虫。

  安装 Scrapy 爬虫框架

  参考Windows环境下安装Scrapy框架的步骤,本地一步执行命令pip3 install scrapy。

  

  创建并启动 Scrapy 爬虫项目

  开发一个Scrapy爬虫项目,需要使用Scrapy命令创建一个爬虫项目,这是一个半成品的爬虫项目。在命令行创建爬虫项目的步骤如下

  创建爬虫项目:scrapy startproject 项目名称切换到项目根目录创建爬虫文件:scrapy genspider 爬虫名称启动爬虫项目的网址:scrapy crawl 爬虫名称

  #创建爬虫项目并运行爬虫

scrapy startproject helloSpider

cd helloSpider

scrapy genspider test http://127.0.0.1/DVWA-master/

scrapy crawl test # 工程根目录执行

#执行回显模块

[scrapy.utils.log]

[scrapy.crawler]

[scrapy.extensions.telnet]

[scrapy.middleware]

[scrapy.core.engine]

[scrapy.extensions.logstats]

[scrapy.downloadermiddlewares.retry]

[scrapy.downloadermiddlewares.robotstxt]

# helloSpider/spiders/test.py文件

import scrapy

class TestSpider(scrapy.Spider):

name = 'test'

allowed_domains = ['http://127.0.0.1/DVWA-master/']

start_urls = ['http://http://127.0.0.1/DVWA-master//']

def parse(self, response):

pass

  部分执行结果如下,可以看到打印的内容有点混乱。

  

  整体把握scrapy项目

  创建项目的文件结构如下,项目配置文件scrapy.cfg进行了过滤,因为开发爬虫的时候不需要修改这个文件。如图所示,Scrapy爬虫项目主要由5个模块组成:爬虫、items模块、中间件模块、数据存储模块、配置模块,然后对各个模块进行简单说明。

  Scrapy框架的引擎和调度器暂时忽略

  

  #流程图代码

graph TB

A(项目根目录helloSpider)

B(helloSpider)

B3(spiders)

B4(items.py)

B5(middlewares.py)

B6(pipelines.py)

B7(settings.py)

A-->B

B-->B3

B-->B4

B-->B5

B-->B6

B-->B7

b31(test.py)

B3-->b31

  (1)spiders文件夹:是Scrapy爬虫项目的爬虫模块,可以有多个爬虫文件。设计理念是方便一站一个爬虫,爬虫可以共享项目中的其他模块以提高重用和开发效率。

  爬虫文件的内容一目了然。值得注意的是,爬虫默认是无状态的,所以Scrapy框架允许你通过覆盖爬虫文件中的start_requests()方法来自定义爬虫起始页的爬取设置。

  (2)items.py 文件:爬取的数据可能需要在模块之间进行传输,所以items.py 中定义了统一的数据格式。

  (3)pipelines.py 文件:Pipeline的意思是管道,是框架中的一个数据处理模块,经常用来完成数据的持久化,也可以对爬取的数据进行过滤和去重。

  (4)middlewares.py文件:Middlewares就是中间件,中间件的存在方便了爬虫框架的功能扩展。在Scrapy爬虫框架中,中间件分为下载器和蜘蛛两大类。

  (5)settings.py文件:Settings模块负责设置爬虫行为模式、模块激活等配置功能,是爬虫框架中非常重要的一个模块。列举一些开发中常用的配置:

  管道模块的启动和激活顺序配置蜘蛛抓取网页数据的频率、默认headers等属性配置启动或关闭指定蜘蛛中间件配置、下载器中间件配置爬虫请求流程

  结合第3章的部分内容,列出执行过程。

  

  # 流程图代码

graph TB

a(启动爬虫)

b(引擎访问start_urls获取URL)

c(引擎调用Downloader模块下载网页)

d(引擎把下载结果传递给Spider的parse方法)

e(用户处理Response类对象response提取数据)

a-->b

b-->c

c-->d

d-->e

  下一章3的内容最终会涉及到爬虫的编写和登陆(数据处理和数据存储)的问题

  目前了解scrapy项目的执行流程,但是不知道scrapy引擎是怎么运行的,scrapy的入口文件是哪个,尤其是如何定义request类,这些对二次开发非常重要。那么接下来,审计scrapy框架的源代码。

  审计scrapy框架

  让审计先行,主要目标是定制爬虫,不要迷失在知识的海洋中。

  框架文件和入口文件,显然入口文件是__main__.py文件:

  

  请求类Request:查看scrapy根目录下的http文件夹。该目录下的__init__.py文件定义了请求类:class Request(object_ref)

  scrapy通过Request类对象发起请求,参考:scrapy中的python-Request参数。

  第三章:数据抽取和多级网络爬取,明确进度和目标

  第 2 章重写了 start_requests(self) 方法。test.py 文件中收录以下变量,这些变量会随着目标的变化而变化:

  当前爬虫变量的描述

  allowed_domains

  允许抓取的 URL。如果不定义,所有网页都会被抓取,即通用搜索爬虫

  起始网址

  爬虫起始页

  饼干

  验证

  完成第一次网页访问后,本章需要完成两个任务:数据筛选和提取,以及多级网页爬取。

  响应对象

  爬虫访问网页后,将收录网页结果的响应对象返回给 parse() 方法。其常用属性和方法如下:

  属性或方法描述

  网址

  当前返回页面对应的url

  地位

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线