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中while true的使用
Oct 13 Python
Python实现简单的语音识别系统
Dec 13 Python
python简单商城购物车实例代码
Mar 15 Python
解决python读取几千万行的大表内存问题
Jun 26 Python
Django contenttypes 框架详解(小结)
Aug 13 Python
python安装twisted的问题解析
Aug 21 Python
python发送告警邮件脚本
Sep 17 Python
pytorch使用Variable实现线性回归
May 21 Python
安装PyInstaller失败问题解决
Dec 14 Python
Spark处理数据排序问题如何避免OOM
May 21 Python
将tf.batch_matmul替换成tf.matmul的实现
Jun 18 Python
python与c语言的语法有哪些不一样的
Sep 13 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学习 函数 课件
2008/06/15 PHP
PHP中将字符串转化为整数(int) intval() printf() 性能测试
2020/03/20 PHP
注意:php5.4删除了session_unregister函数
2013/08/05 PHP
ThinkPHP3.2.2的插件控制器功能简述
2014/07/09 PHP
php中get_cfg_var()和ini_get()的用法及区别
2015/03/04 PHP
php实现的简单中文验证码功能示例
2017/01/03 PHP
Thinkphp 框架基础之入口文件功能、定义与用法分析
2020/04/27 PHP
通过jquery实现tab标签浏览效果
2007/02/20 Javascript
JavaScript 基础篇(一)
2012/03/30 Javascript
浅析Node在构建超媒体API中的作用
2014/07/30 Javascript
JS 获取鼠标左右键的键值方法
2014/10/11 Javascript
javascript通过获取html标签属性class实现多选项卡的方法
2015/07/27 Javascript
js实现select二级联动下拉菜单
2020/04/17 Javascript
什么是JavaScript注入攻击?
2016/09/14 Javascript
初探nodeJS
2017/01/24 NodeJs
如何把vuejs打包出来的文件整合到springboot里
2018/07/26 Javascript
VUE简单的定时器实时刷新的实现方法
2019/01/20 Javascript
vue-router路由模式详解(小结)
2019/08/26 Javascript
js 使用ajax设置和获取自定义header信息的方法小结
2020/03/12 Javascript
antd-DatePicker组件获取时间值,及相关设置方式
2020/10/27 Javascript
Python实现计算文件夹下.h和.cpp文件的总行数
2015/04/23 Python
浅谈Python的Django框架中的缓存控制
2015/07/24 Python
sublime python3 输入换行不结束的方法
2018/04/19 Python
Python使用win32 COM实现Excel的写入与保存功能示例
2018/05/03 Python
Python入门Anaconda和Pycharm的安装和配置详解
2019/07/16 Python
python3.6编写的单元测试示例
2019/08/17 Python
使用python写一个自动浏览文章的脚本实例
2019/12/05 Python
如何基于python3和Vue实现AES数据加密
2020/03/27 Python
python 解决mysql where in 对列表(list,,array)问题
2020/06/06 Python
详解Pymongo常用查询方法总结
2021/01/29 Python
HTML5之消息通知的使用(Web Notification)
2018/10/30 HTML / CSS
Lands’ End官网:经典的美国生活方式品牌
2016/08/14 全球购物
财务管理专业毕业生求职信范文
2013/09/21 职场文书
生物化工专业个人自荐信
2013/09/26 职场文书
促销活动总结报告
2014/04/26 职场文书
抗洪救灾先进集体事迹材料
2014/05/26 职场文书