爬虫最好的方式: 下载一页匹配一页,以后可以使用多线程让抓取页面和存储到数据库分开进行
爬取动态网页的两种方式, 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中的爬取路径,更精确就可以了。