爬虫 scrapy 框架极简入门

前言

工作需要,对 scrapy 进行了解,并逐步开始使用。门槛不高,有些许 Python 编程经验就可。

1.入门第一步:

搭环境,先把 python 环境搞定,我用的是2.7(工作需要,但是建议用3.x 的,2020年以后 python 2.7 不再更新)。
我的电脑是 win10 ,只要是 windows 的电脑搭环境都费劲,linux 和 mac相对简单(江湖传言,真正的程序员都不用 windows ),花了不少时间,环境搭好了,不做详细描述,参见windows下安装scrapy

2.开始项目:

开始项目前,建议先装一个集成开发环境 PyCharm 。

在 PyCharm 的命令行工具(Terminal)里面输入 scrapy startproject ScrapyTest 命令,如图,仔细阅读里面的文字说明(会少很多麻烦)
建工程
然后找到创建工程的目录,打开该工程,目录如下:
工程目录
对于这个目录,只有 spiders 是存放爬虫文件的目录,其他文件或目录是协助存储,清洗等功能的,可以不用管,在这里不详细介绍。

3.新建爬虫

在 spiders 目录新建 python 文件,文件名可以随意,写入下面代码 ,代码关键点会有注释

#!/usr/bin/python
# -*- coding: utf-8 -*-

import scrapy
import urlparse   #拼接 url 用的类函数
import time
import sys

reload(sys)
sys.setdefaultencoding('utf-8')     #重新定义编码


class BaoJiWangSpider(scrapy.Spider):
    name = 'bao_ji_wang'    #爬虫名,是爬虫唯一入口
    start_urls = []

    def __init__(self, start_url=None):          #初始化函数,用于传入启动参数,也可以把参数写死
        super(BaoJiWangSpider, self).__init__()
        self.start_urls = start_url.split('|')

    def start_requests(self):
        for url in self.start_urls:
            yield scrapy.Request(url=url, method='get', callback=self.parse)    # get方式请求url的信息,并调用parse函数处理

    def parse(self, response):
        selectors = response.xpath("//div[@class='xld nvbing5_nr']/dl[@class='cl nvbing5_lb_nrys']")       #xpath语法解析信息
        for selector in selectors:
            href = selector.xpath("./dt//@href").get()
            url = urlparse.urljoin(response.url, href)  # 拼接超链接
            pub_time = (selector.xpath("./dd/span/text()").get()).strip()  # 获取发布时间
            yield scrapy.Request(url=url, method='get',
                                 meta={'pub_time': pub_time}, callback=self.parse_link)   # 调用另一个函数处理详情页

    @staticmethod
    def parse_link(response):
        url = response.url
        title = response.xpath("//h1/text()").get()   # 获取详情页标题
        pub_time = response.meta['pub_time']  # 获取上一函数传来的发布时间值
        media_name = (response.xpath("//p[@class='xg1']/text()[2]").get()).replace("\n", "").strip() #获取发布媒体
        content = response.xpath("//td[@id='article_content']").get() # 获取详情页内容
        collect_time = time.strftime('%Y-%m-%d %H:%M')  # 格式化采集时间

        print '*' * 80
        print url
        print pub_time
        print title
        print media_name
        print collect_time
        file_path = title[0:10] + ".html"
        with open(file_path, 'w') as f:  # windows 下编码可能问题,建议不要使用 print 打印内容,会报错,可以保存文件用浏览器打开查看内容
            f.write(content)
            
4.运行爬虫

在 PyCharm 的命令行输入
scrapy crawl bao_ji_wang -a start_url=“http://www.cn0917.com/baojinews/
( 用的是宝鸡网下面的一个新闻列表 ,不要纠结为啥用这个网站,http://www.cn0917.com/baojinews/)
可以得到保存的文件(里面有很多 h5 的标签,使用浏览器打开可以直接看到内容)
保存文件
和打印的内容(部分)

********************************************************************************
http://www.cn0917.com/portal.php?mod=view&aid=21239
2019-3-15 14:00
市委审计委员会办公室挂牌成立
宝鸡日报·宝鸡网
2019-03-29 17:29
********************************************************************************
5.Tips

爬虫的文件里面有几个约定函数
start_requests: 初始化函数完成以后就开始执行此函数,名字一定不能有错误,可有可无。
parse: 在没有 start_requests 函数时会在初始化函数完成以后就执行,名字不能有错误,没有 start_requests 函数时一定不能缺少,有start_requests 函数时会变成一个普通函数。

发布了76 篇原创文章 · 获赞 46 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/qingquanyingyue/article/details/88898704