Python3使用Scrapy快速构建第一款爬虫

前言

最近因为想要构建自己的应用程序,所以需要用到爬虫,然后就开始了爬虫的鼓捣和学习。为了让大家更快的入门一款爬虫,为大家讲解一下scrapy的基本原理,和快速上手使用,爬取的页面是伯乐在线,大家可以去提前熟悉一下。


环境搭建

操作系统:WIN10

IDE: 使用的是全家桶Pycharm

1. 全局安装scrapy

pip install scrapy -g

2. 创建一个存放项目的文件夹

mkdir Spider-Python3

3. 创建scrapy工程

scrapy startproject ArticleSpider

4. 进入ArticleSpider工程目录并使用模板创建爬虫

cd ArticleSpider
scrapy genspider jobbole blog.jobbole.com
注: scrapy genspider <爬虫名> <爬取的主域名>

5. 导入PyCharm并修改settngs.py

# Obey robots.txt rules
ROBOTSTXT_OBEY = False
注: 将不会检测域名是否符合Robots协议,意味着不会过滤域名


爬虫编写

1. 编写debug测试入口

为了能够在PyCharm中运行并进行debug,在工程下创建main.py作为程序启动入口


添加如下代码:

from scrapy.cmdline import execute

import sys
import os

sys.path.append(os.path.abspath(__file__))
execute(['scrapy', 'crawl', 'jobbole'])

注: 添加上述测试入口文件后,在main.py中右键debug,则可以debug测试爬虫。如果爬虫名不同则将jobbole替换成自己的爬虫名即可。

2. 进入爬虫文件修改需要爬取的主页面URL

class JobboleSpider(scrapy.Spider):
    name = 'jobbole'
    allowed_domains = ['blog.jobbole.com']
    start_urls = ['http://blog.jobbole.com/all-posts/']

注: 修改start_urls,则爬虫会从此URL进行爬取工作

3. 在入口函数中进行下一页的循环爬取

    def parse(self, response):           
        #爬取当前页的所有新闻url并交给parse_detail解析
        post_urls = response.css('.post-meta a.archive-title::attr(href)').extract()
        for post_url in post_urls:
            yield Request(parse.urljoin(response.url, post_url), callback=self.parse_detail)
        #爬取下一页的url并递归调用当前parse进行解析
        next_href = response.css('.next.page-numbers::attr(href)').extract_first()
        if next_href:
            yield Request(url=parse.urljoin(response.url, next_href), callback=self.parse)

注:因为爬虫开始执行后会直接执行parse函数,所以在此函数中应编写循环爬取当前页的所有新闻的操作,并交给解析器parse_detail进行解析。当前页爬取完后,再爬取下一页的url,将下一页再交给parse进行爬取每一条新闻。

4. 编写页面爬取逻辑

    def parse_detail(self, response):
        # 页面爬取逻辑
        title = response.css('.entry-header h1::text').extract_first().strip()
        pass

注: response.css()是将下载器下载的每一个url页面,使用css语法进行过滤从而得到需要的内容。使用浏览器的开发者工具进行获取要选择的元素,并获取其样式。.extract()是获取当前元素的内容,因为形式是一个数组,所以可以[0]来获取第一个元素或者直接extract_first()获取第一个元素内容,strip()是去掉前后空格。




猜你喜欢

转载自blog.csdn.net/qq_33876553/article/details/80100283
今日推荐