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()是去掉前后空格。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Hellovass 的博客

社交化分享组件踩坑

问题是这样的,项目里的社交化分享是基于 UMShare 封装成的一个 ShareLib module,为了让这个 module 对调用者说更透明,我将 WXEn...

2855
来自专栏坚毅的PHP

jersey处理支付宝异步回调通知的问题:java.lang.IllegalArgumentException: Error parsing media type 'application/x-www

tcpflow以流为单位分析请求内容,非常适合服务器端接口类服务查问题 这次遇到的问题跟支付宝支付后的回调post结果有关 淘宝的代码例子: publi...

5935
来自专栏程序员的碎碎念

JS动态加载以及JavaScript void(0)的爬虫解决方案

对于使用JS动态加载, 或者将下一页地址隐藏为JavaScript void(0)的网站, 如何爬取我们要的信息呢?

1586
来自专栏緣來來來

Python爬虫 --- 2.3 Scrapy 框架的简单使用

网络爬虫,是在网上进行数据抓取的程序,使用它能够抓取特定网页的HTML数据。虽然我们利用一些库开发一个爬虫程序,但是使用框架可以大大提高效率,缩短开发时间。Sc...

861
来自专栏互联网研发闲思录

maven junit 单元测试插件配置

单元测试插件配置 pom.xml中增加 <dependency> <groupId>junit</groupId> ...

21410
来自专栏lgp20151222

rabbit的简单搭建,java使用rabbitmq queue的简单例子和一些坑

由于本人的码云太多太乱了,于是决定一个一个的整合到一个springboot项目里面。

3371
来自专栏Java学习网

Java 并发包中的读写锁及其实现分析

Java 并发包中的读写锁及其实现分析 1. 前言 在Java并发包中常用的锁(如:ReentrantLock),基本上都是排他锁,这些锁在同一时刻只允许一个线...

3474
来自专栏Python绿色通道

高级爬虫( 二):Scrapy爬虫框架初探

先确保你已经在电脑上安装好了Scrapy模块,说一下Scrapy安装的问题,网上大部分安装办法已经失效了,主要是因为 网站:https://www.lfd.uc...

1311
来自专栏张戈的专栏

服务器反爬虫攻略:Apache/Nginx/PHP禁止某些User Agent抓取网站

我们都知道网络上的爬虫非常多,有对网站收录有益的,比如百度蜘蛛(Baiduspider),也有不但不遵守 robots 规则对服务器造成压力,还不能为网站带来流...

5315
来自专栏比原链

Derek解读Bytom源码-启动与停止

Gitee地址:https://gitee.com/BytomBlockchain/bytom

1233

扫码关注云+社区

领取腾讯云代金券