Python的爬虫框架scrapy用21行代码写一个爬虫


Posted in Python onApril 24, 2017

开发说明

开发环境:Pycharm 2017.1(目前最新)

开发框架:Scrapy 1.3.3(目前最新)

目标

爬取线报网站,并把内容保存到items.json里

页面分析

Python的爬虫框架scrapy用21行代码写一个爬虫

根据上图我们可以发现内容都在类为post这个div里

下面放出post的代码

<div class="post">
<!-- baidu_tc block_begin: {"action": "DELETE"} -->
<div class="date"><span>04月</span><span class="f">07日</span></div><!-- baidu_tc block_end -->
<h2><a href="http://www.abckg.com/193.html" rel="external nofollow" title="4月7日 淘金币淘里程领取京东签到" rel="bookmark" target="_blank">4月7日 淘金币淘里程领取京东签到</a><span>已结束</span></h2>
<h6>发布日期: 2017-04-07 | 分类: <a href="http://www.abckg.com/xunibi" rel="external nofollow" >虚拟币</a> | 浏览:125177
</h6><div class="intro"><p>淘金币一键领取 http://021.tw/t/ https://www.chaidu.com/App/Web/Taobao-Coin/ 【电脑端30金币】 https://taojinbi.taobao.com/inde ... auto_take=true 【手机端30金币】 http://h5.m.taobao...</p></div></div>

实现方法

1、定义items

class DemoItem(scrapy.Item):
 id = scrapy.Field()
 title = scrapy.Field()
 href = scrapy.Field()
 content = scrapy.Field()

2、新建一个爬虫名为test

# -*- coding: utf-8 -*-
import scrapy
from demo.items import DemoItem
from scrapy.http import Request
class TestSpider(scrapy.Spider):
 #定义爬虫的名字和需要爬取的网址
 name = "test"
 allowed_domains = ["www.abckg.com"]
 start_urls = ['http://www.abckg.com/']
 def parse(self, response):
 for resp in response.css('.post'):
  #实例化item
  item = DemoItem()
  #把获取到的内容保存到item内
  item['href'] = resp.css('h2 a::attr(href)').extract()
  item['title'] = resp.css('h2 a::text').extract()
  item['content'] = resp.css('.intro p::text').extract()
  yield item
  
 #下面是多页面的爬取方法
 urls = response.css('.pageinfo a::attr(href)').extract()
 for url in urls:
  yield Request(url, callback=self.parse)
 categorys = response.css('.menu li a::attr(href)').extract()
 for ct in categorys:
  yield Request(ct, callback=self.parse)

3、修改settings.py,添加以下代码

FEED_EXPORT_ENCODING = 'utf-8'

#运行

打开cmd输入

scrapy crawl test -o items.json

Python的爬虫框架scrapy用21行代码写一个爬虫

Python的爬虫框架scrapy用21行代码写一个爬虫

已知bug

如果多次运行该爬虫,不会覆盖原有的内容,而是追加数据(好像是scrapy的bug)

可拓展内容

     1、定时运行爬虫,当检查到网站更新时获取新数据并发邮件通知

     2、检测数据是否重复

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者使用python能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
Python实现控制台输入密码的方法
May 29 Python
python中enumerate函数遍历元素用法分析
Mar 11 Python
python机器学习库常用汇总
Nov 15 Python
Python2.7 实现引入自己写的类方法
Apr 29 Python
Python定义一个跨越多行的字符串的多种方法小结
Jul 19 Python
python获取微信企业号打卡数据并生成windows计划任务
Apr 30 Python
python运用pygame库实现双人弹球小游戏
Nov 25 Python
你可能不知道的Python 技巧小结
Jan 29 Python
python函数定义和调用过程详解
Feb 09 Python
Python数据可视化处理库PyEcharts柱状图,饼图,线性图,词云图常用实例详解
Feb 10 Python
python 基于selectors库实现文件上传与下载
Dec 31 Python
Django+Nginx+uWSGI 定时任务的实现方法
Jan 22 Python
fastcgi文件读取漏洞之python扫描脚本
Apr 23 #Python
批量获取及验证HTTP代理的Python脚本
Apr 23 #Python
深入理解python中的select模块
Apr 23 #Python
Python3如何解决字符编码问题详解
Apr 23 #Python
Python制作刷网页流量工具
Apr 23 #Python
Python读取指定目录下指定后缀文件并保存为docx
Apr 23 #Python
正确理解python中的关键字“with”与上下文管理器
Apr 21 #Python
You might like
简单介绍下 PHP5 中引入的 MYSQLI的用途
2007/03/19 PHP
PHP 魔术函数使用说明
2010/05/14 PHP
php实现用于删除整个目录的递归函数
2015/03/16 PHP
WordPress中用于创建以及获取侧边栏的PHP函数讲解
2015/12/29 PHP
xml 与javascript结合的问题解决方法
2007/03/24 Javascript
浅谈javascript对象模型和function对象
2014/12/26 Javascript
js判断某个方法是否存在实例代码
2015/01/10 Javascript
基于jquery实现的树形菜单效果代码
2015/09/06 Javascript
Bootstrap基本组件学习笔记之列表组(11)
2016/12/07 Javascript
vue之nextTick全面解析
2017/05/17 Javascript
10 种最常见的 Javascript 错误(频率最高)
2018/02/08 Javascript
Vue.directive()的用法和实例详解
2018/03/04 Javascript
vue实现简单loading进度条
2018/06/06 Javascript
JavaScript 正则命名分组【推荐】
2018/06/07 Javascript
Angular实现svg和png图片下载实现
2019/05/05 Javascript
Python中Collection的使用小技巧
2014/08/18 Python
python实现在目录中查找指定文件的方法
2014/11/11 Python
对python中array.sum(axis=?)的用法介绍
2018/06/28 Python
对django中foreignkey的简单使用详解
2019/07/28 Python
python 三元运算符使用解析
2019/09/16 Python
Python日志syslog使用原理详解
2020/02/18 Python
意大利奢侈品购物网站:Giglio
2018/01/05 全球购物
戴森香港官方网站:Dyson香港
2021/02/11 全球购物
商务英语专业毕业生自荐信
2013/11/05 职场文书
实习生自荐信范文分享
2013/11/27 职场文书
运动会入场词60字
2014/02/15 职场文书
学习焦裕禄同志为人民服务思想汇报
2014/09/10 职场文书
群众路线教育实践活动对照检查材料
2014/09/22 职场文书
交通事故协议书范本
2014/11/18 职场文书
高中班主任评语
2014/12/30 职场文书
2015年学校后勤工作总结
2015/04/08 职场文书
感谢师恩主题班会
2015/08/17 职场文书
Python实战之用tkinter库做一个鼠标模拟点击器
2021/04/27 Python
在Django中使用MQTT的方法
2021/05/10 Python
pytorch 运行一段时间后出现GPU OOM的问题
2021/06/02 Python
Python+SeaTable实现计算两个日期间的工作日天数
2022/07/07 Python