前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python3使用Scrapy快速构建第一款爬虫

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

作者头像
十里桃花舞丶
发布2018-05-17 14:43:22
6450
发布2018-05-17 14:43:22
举报
文章被收录于专栏:桥路_大数据

前言

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

环境搭建

操作系统:WIN10

IDE: 使用的是全家桶Pycharm

1. 全局安装scrapy

代码语言:javascript
复制
pip install scrapy -g

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

代码语言:javascript
复制
mkdir Spider-Python3

3. 创建scrapy工程

代码语言:javascript
复制
scrapy startproject ArticleSpider

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

代码语言:javascript
复制
cd ArticleSpider
scrapy genspider jobbole blog.jobbole.com

注: scrapy genspider <爬虫名> <爬取的主域名>

5. 导入PyCharm并修改settngs.py

代码语言:javascript
复制
# Obey robots.txt rules
ROBOTSTXT_OBEY = False

注: 将不会检测域名是否符合Robots协议,意味着不会过滤域名

爬虫编写

1. 编写debug测试入口

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

添加如下代码:

代码语言:javascript
复制
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

代码语言:javascript
复制
class JobboleSpider(scrapy.Spider):
    name = 'jobbole'
    allowed_domains = ['blog.jobbole.com']
    start_urls = ['http://blog.jobbole.com/all-posts/']

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

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

代码语言:javascript
复制
    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. 编写页面爬取逻辑

代码语言:javascript
复制
    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()是去掉前后空格。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年04月27日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 环境搭建
  • 爬虫编写
相关产品与服务
CODING DevOps
CODING DevOps 一站式研发管理平台,包括代码托管、项目管理、测试管理、持续集成、制品库等多款产品和服务,涵盖软件开发从构想到交付的一切所需,使研发团队在云端高效协同,实践敏捷开发与 DevOps,提升软件交付质量与速度。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档