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中Random和Math模块学习笔记
May 18 Python
python选择排序算法实例总结
Jul 01 Python
python多进程和多线程究竟谁更快(详解)
May 29 Python
python实现kNN算法
Dec 20 Python
python3安装pip3(install pip3 for python 3.x)
Apr 03 Python
python 拷贝特定后缀名文件,并保留原始目录结构的实例
Apr 27 Python
python 格式化输出百分号的方法
Jan 20 Python
使用Python和Prometheus跟踪天气的使用方法
May 06 Python
详解Python的三种可变参数
May 08 Python
python3实现弹弹球小游戏
Nov 25 Python
利用python汇总统计多张Excel
Sep 22 Python
Python采集爬取京东商品信息和评论并存入MySQL
Apr 12 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
一个多文件上传的例子(原创)
2006/10/09 PHP
PHP:风雨欲来 路在何方?
2006/10/09 PHP
Apache2 httpd.conf 中文版
2006/11/17 PHP
提高PHP编程效率 引入缓存机制提升性能
2010/02/15 PHP
用PHP实现的四则运算表达式计算实现代码
2011/08/02 PHP
yii2学习教程之5种内置行为类详解
2017/08/03 PHP
针对PHP开发安全问题的相关总结
2019/03/22 PHP
PHP基于进程控制函数实现多线程
2020/12/09 PHP
jquery1.5.1中根据元素ID获取元素对象的代码
2011/04/02 Javascript
js 弹出框只弹一次(二次修改之后的)
2013/11/26 Javascript
Jquery uploadify图片上传插件无法上传的解决方法
2013/12/16 Javascript
jquery实现两边飘浮可关闭的对联广告
2015/11/27 Javascript
基于jQuery实现的无刷新表格分页实例
2016/02/17 Javascript
javascript每日必学之继承
2016/02/23 Javascript
Bootstrap项目实战之首页内容介绍(全)
2016/04/25 Javascript
AngularJS  自定义指令详解及实例代码
2016/09/14 Javascript
Vue2递归组件实现树形菜单
2017/04/10 Javascript
node.js 抓取代理ip实例代码
2017/04/30 Javascript
详解VueJS 数据驱动和依赖追踪分析
2017/07/26 Javascript
浅谈vue父子组件怎么传值
2018/07/21 Javascript
postman自定义函数实现 时间函数的思路详解
2019/04/17 Javascript
Vue开发之watch监听数组、对象、变量操作分析
2019/04/25 Javascript
Vue实现多标签选择器
2019/11/28 Javascript
在vue中使用echarts(折线图的demo,markline用法)
2020/07/20 Javascript
Python日期操作学习笔记
2008/10/07 Python
Ubuntu下安装PyV8
2016/03/13 Python
python实现神经网络感知器算法
2017/12/20 Python
对pytorch网络层结构的数组化详解
2018/12/08 Python
python 利用浏览器 Cookie 模拟登录的用户访问知乎的方法
2019/07/11 Python
python安装gdal的两种方法
2019/10/29 Python
python实现人机猜拳小游戏
2020/02/03 Python
Django+Django-Celery+Celery的整合实战
2021/01/20 Python
美国内衣品牌:Leonisa
2016/08/14 全球购物
全球在线商店:BerryLook
2019/04/14 全球购物
教师辞职信范文
2015/02/28 职场文书
Pygame Draw绘图函数的具体使用
2021/11/17 Python