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中使用hashlib模块处理算法的教程
Apr 28 Python
详解python的几种标准输出重定向方式
Aug 15 Python
浅谈python中copy和deepcopy中的区别
Oct 23 Python
Python中pandas模块DataFrame创建方法示例
Jun 20 Python
Python3 修改默认环境的方法
Feb 16 Python
Python函数装饰器常见使用方法实例详解
Mar 30 Python
使用Python正则表达式操作文本数据的方法
May 14 Python
Pytorch中index_select() 函数的实现理解
Nov 19 Python
Tensorflow之梯度裁剪的实现示例
Mar 08 Python
python实现图片转字符画
Feb 19 Python
python第三方网页解析器 lxml 扩展库与 xpath 的使用方法
Apr 06 Python
python实现对doc、txt、xls等文档的读写操作
Apr 02 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
深入Memcache的Session数据的多服务器共享详解
2013/06/13 PHP
一个比较不错的PHP日历类分享
2014/11/18 PHP
php中heredoc与nowdoc介绍
2014/12/25 PHP
Laravel 中获取上一篇和下一篇数据
2015/07/27 PHP
在PHP中使用FastCGI解析漏洞及修复方案
2015/11/10 PHP
weiphp微信公众平台授权设置
2016/01/04 PHP
PHP实现一维数组与二维数组去重功能示例
2018/05/24 PHP
TP5框架实现签到功能的方法分析
2020/04/05 PHP
Lazy Load 延迟加载图片的 jQuery 插件
2010/02/06 Javascript
javascript 解决表单仍然提交即使监听处理函数返回false
2010/03/14 Javascript
Javascript中匿名函数的多种调用方式总结
2013/12/06 Javascript
javascript通过className来获取元素的简单示例代码
2014/01/10 Javascript
jquery 页眉单行信息滚动显示实现思路及代码
2014/06/26 Javascript
浅谈javascript中createElement事件
2014/12/05 Javascript
jQuery操作表单常用控件方法小结
2015/03/23 Javascript
js立即执行函数: (function ( ){})( ) 与 (function ( ){}( )) 有什么区别?
2015/11/18 Javascript
理解Angular的providers给Http添加默认headers
2017/07/04 Javascript
JavaScript对JSON数据进行排序和搜索
2017/07/24 Javascript
react-native-video实现视频全屏播放的方法
2018/03/19 Javascript
Element-UI Table组件上添加列拖拽效果实现方法
2018/04/14 Javascript
VUE+Element UI实现简单的表格行内编辑效果的示例的代码
2018/10/31 Javascript
微信小程序跨页面数据传递事件响应实现过程解析
2019/12/19 Javascript
vue实现简易计算器功能
2021/01/20 Vue.js
Python 迭代,for...in遍历,迭代原理与应用示例
2019/10/12 Python
如何基于Python创建目录文件夹
2019/12/31 Python
Django 后台带有字典的列表数据与页面js交互实例
2020/04/03 Python
Python tkinter实现简单加法计算器代码实例
2020/05/13 Python
ubuntu16.04升级Python3.5到Python3.7的方法步骤
2020/08/20 Python
Pycharm 解决自动格式化冲突的设置操作
2021/01/15 Python
10分钟理解CSS3 Grid布局
2018/12/20 HTML / CSS
基于Modernizr 让网站进行优雅降级的分析
2013/04/21 HTML / CSS
NYX Professional Makeup俄罗斯官网:世界知名的化妆品品牌
2019/12/26 全球购物
电子信息工程专业自荐书
2014/06/24 职场文书
婚礼答谢词
2015/01/04 职场文书
自我推荐信怎么写
2015/03/24 职场文书
python 命令行传参方法总结
2021/05/25 Python