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数据库的连接实现方法与注意事项
Feb 27 Python
flask框架实现连接sqlite3数据库的方法分析
Jul 16 Python
python 3.7.0 安装配置方法图文教程
Aug 27 Python
解决win64 Python下安装PIL出错问题(图解)
Sep 03 Python
Python3之手动创建迭代器的实例代码
May 22 Python
Python for循环与getitem的关系详解
Jan 02 Python
使用Python matplotlib作图时,设置横纵坐标轴数值以百分比(%)显示
May 16 Python
PyQt5实现简单的计算器
May 30 Python
Pyinstaller加密打包应用的示例代码
Jun 11 Python
详解python logging日志传输
Jul 01 Python
Python预测2020高考分数和录取情况
Jul 08 Python
python 代码运行时间获取方式详解
Sep 18 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
PHP IPV6正则表达式验证代码
2010/02/16 PHP
PHP程序开发范例学习之表单 获取文本框的值
2011/08/08 PHP
php 中英文语言转换类代码
2011/08/11 PHP
nginx+php-fpm配置文件的组织结构介绍
2012/11/07 PHP
ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单
2014/05/15 PHP
android上传图片到PHP的过程详解
2015/08/03 PHP
thinkPHP中验证码的简单使用方法
2015/12/26 PHP
用php+ajax新建流程(请假、进货、出货等)
2017/06/11 PHP
php实现姓名根据首字母排序的类与方法(实例代码)
2018/05/16 PHP
Thinkphp 框架扩展之Widget扩展实现方法分析
2020/04/23 PHP
PHP设计模式(七)组合模式Composite实例详解【结构型】
2020/05/02 PHP
使用jQuery简化Ajax开发 Ajax开发入门
2009/10/14 Javascript
利用jQuery 实现GridView异步排序、分页的代码
2010/02/06 Javascript
JS 控制小数位数的实现代码
2011/08/02 Javascript
jQuery JSON实现无刷新三级联动实例探讨
2013/05/28 Javascript
jQuery(js)获取文字宽度(显示长度)示例代码
2013/12/31 Javascript
详解JavaScript中的every()方法
2015/06/08 Javascript
探析浏览器执行JavaScript脚本加载与代码执行顺序
2016/01/12 Javascript
使用jQuery ajaxupload插件实现无刷新上传文件
2017/04/23 jQuery
axios全局注册,设置token,以及全局设置url请求网段的方法
2018/09/25 Javascript
[01:03:13]VG vs Pain 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python命令行解析模块详解
2018/02/01 Python
Python实现的特征提取操作示例
2018/12/03 Python
Django中如何防范CSRF跨站点请求伪造攻击的实现
2019/04/28 Python
使用django的ORM框架按月统计近一年内的数据方法
2019/07/18 Python
python爬虫中多线程的使用详解
2019/09/23 Python
浅析python redis的连接及相关操作
2019/11/07 Python
Django DRF APIView源码运行流程详解
2020/08/17 Python
python如何提升爬虫效率
2020/09/27 Python
基于Python爬取京东双十一商品价格曲线
2020/10/23 Python
自我鉴定的范文
2013/10/03 职场文书
总务岗位职责
2013/11/19 职场文书
国际贸易实训报告
2014/11/05 职场文书
2015年入党决心书
2015/02/05 职场文书
简单的辞职信怎么写
2015/02/28 职场文书
使用canvas仿Echarts实现金字塔图的实例代码
2021/11/11 HTML / CSS