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中的爬取路径,更精确就可以了。


 

猜你喜欢

转载自blog.csdn.net/qq_40994972/article/details/83903744