11月7日python爬虫框架Scrapy基础知识

爬虫最好的方式: 下载一页匹配一页,以后可以使用多线程让抓取页面和存储到数据库分开进行

爬取动态网页的两种方式, 1.selenium模拟浏览器 2. 在F12的Network中抓包,使用json字符串

运行爬虫需要安装win23 :  pip install pypiwin32

爬虫名文件中的回调函数可以自定义 items文件中可以自定义items

创建爬虫项目和创建爬虫的命令如下: 以下命令中的<>在实际使用的时候不要带上 1.Scrapy创建爬虫项目的命令是: scrapy startproject <projectname>

2.Scrapy创建爬虫的命令是,在项目名称下执行:(最后那个是内置的crawl模板) scrapy genspider <爬虫名称> <目标域名> --template=crawl

3. 爬虫项目的运行命令是: win需要下载pywin32  pip install pypiwin32 scrapy crawl <爬虫名称>

创建完爬虫项目后会自动生成一个spider的文件夹,这个文件夹是用于存放爬虫的 items.py模块是用于自定义类型的,类型的内容是我们想要获取的一个对象的哪些字段 pipelines.py模块是用于把数据持久化的,数据是从爬虫模块的回调函数匹配完目标数据之后传过来的 setting.py模块是用于配置整个爬虫项目的

如果想要存储数据setting文件中的pipeline一定要启用

scrapy shell终端可用于测试xpath: 可以使用scrapy shell <网页地址> 测试xpth公式能否正确的提取数据(相当于直接进入scrapy框架中的回调函数测试xpath公式)

# 保存爬取数据到一个文件中: 进入爬虫的项目名下运行该命令,可以把匹配出的数据直接存到当前目录下的一个json文件中,并设置日志等级(可设可不设) scrapy crawl <爬虫名字> --output=countries.json -s LOG_LEVEL=INFO

日志level总共分5个级别:debug < info< warning< error< critical 

已经学了三个xpath: 1, 原生的xpath , 获取数据可以直接使用/text() 2. webdriver, 模拟浏览器使用的xpath, 只能定位到节点,获取节点数据必须使用 link.get_attribute('href')

3. scrapy中的xpath ,获取数据使用/text(), 但这是一个集成的后边必须加.extract()

爬虫项目一般在命令行运行,可以在项目文件中定义一个bat文件, 里面写上 项目运行的的开始命令,双击就可以直接运行了。

爬虫项目可以记录停止节点,方便下次继续爬取,方法是在开始运行项目的后边加一个属性JOBDIR scrapy crawl <爬虫名称>  -s LOG_LEVEL=INFO -s JOBDIR=craws/country

在setting文件中可以定义数据管道的优先级: 'test1.pipelines.Test1Pipeline': 300, 数越小优先级越高, 自定义的pipeline, 里面定义的函数必须是process_item

存文件可在管道模块中的存储数据类中定义一个开始和一个结束,整个爬虫过程只打开和关闭一次,减少IO操作

爬虫模块的回调函数可以自定义 pipelines模块中可以定义多个pipline类用于不同的存储功能, 比如一个存到文件一个存到数据库,或者是两个类存不同的数据

中间件: 自定义一个中间件,打开setting文件开启

网页直接复制的xpath有时是不准确的, 当拿不到想要的数据的时候,要从前往后一段标签一段标签地查看,看到底是到哪个标签找不到数据了,找到最后一个能打印出来的标签,查看标签内打印出来的其他的数据是不是想要获取的那个标签,然后适当的修改路径,scrapy中定义的想要爬取的路径越精确越好,以防爬取不需要的数据,当爬出不需要的数据时打开链接看一下,如果不是自己想要的数据链接,但是也包含在自己前面定义的想要爬取的路径中,那就说明自己定的路径范围太大了,修改Rule allow中的爬取路径,更精确就可以了。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券