python 爬虫 -- scrapy

139 阅读2分钟

在小型的爬虫项目中,我们只需要requests框架就能完成爬虫了,但是遇到大规模的爬虫单单用requests就会比较吃力,所以现在我们学习用scrapy框架来完成爬虫。

scrapy 安装

通过pip install Scrapy 即可安装 Scrapy,然后在空白的文件目录下初始化一个爬虫项目scrapy startproject spider_demo spider_demo为爬虫项目的名称。通过命令初始化后,我们可以看到下图的目录结构

__init__.py 为包中的初始化文件,便于识别包
items 爬虫实体对象
middlewares 爬虫中间件 -- 网络请求前后所做的事情
pipelines 管道 -- 将输出的item管理起来
setting 爬虫配置文件
spiders 爬虫文件夹 爬虫脚本的父级文件夹

编写我们的第一个爬虫

在spiders创建一个baidu_spider.py


import scrapy
from scrapy import Selector
from scrapy.cmdline import execute

# 百度新闻爬虫
class baiduSpider(scrapy.Spider):
    name = 'baiduNews'
    # 指定爬取地址
    start_urls = ['https://news.baidu.com/']
    # 解析爬取结果
    def parse(self, response):
        li_list = response.xpath('//li[contains(@class,"hdline")]')
        for i in li_list:
            print(''.join(Selector(text=i.get()).xpath('//a//text()').extract()))
            print('==========================')

#命令行启动爬虫
if __name__ == '__main__':
    execute(['scrapy', 'crawl', 'baiduNews'])

启动main函数,我们的爬虫脚本就会自动爬取百度新闻的网页了

解析

爬取网页后我们需要对网页信息提取,scrapy提供了一个很好用的解析语法xpath,xpath解析html后将返回一个Selectors对象,通过get()获取Selectors单个的文本信息,extract()获取文本数组对象。通过学习基本的xpath语法我们就能完成网页的解析,在必要时,我们还可以通过正则表达式来解析网页获取我们想要的信息

总结

利用好scrapy,编写不同的中间件,更利用我们的爬虫。