scrapy 自学入门demo分享
本文基于python 3.7.0,win10平台; 2018-08
安装
安装python
- 官网下载 https://www.python.org/
- 注意环境变量是否配置成功
安装scrapy
为了安装顺利,请备好梯子
- pip install Scrapy
安装过程中注意以下报错信息:
Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools"
解决办法:
- https://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted 下载对应版本twisted的whl文件
- cp:表示python版本
- amd64:表示64位
- 下载后在文件目录下执行: pip install Twisted-18.7.0-cp37-cp37m-win_amd64.whl(文件名)
创建项目
- 创建scrapy:scrapy startproject youName
- 创建spider:scrapy genspider // 在项目跟目录执行
配置settings.py文件
- 如果抓取的内容包含中文可配置:FEED_EXPORT_ENCODING = 'utf-8'
- 报错误信息403:把USER_AGENT加上(可在网站请求头信息中查看)
编写items.py文件
import scrapy
class NovelItem(scrapy.Item):
title = scrapy.Field()
content = scrapy.Field()
这些即你需要保存的字段名
编写spider
import scrapy
# 引入自定义的items
from myTest.items import NovelItem
# # 继承scrapy.Spider
class NovelSpider(scrapy.Spider):
# 爬虫名
name = 'novel_spider'
# 允许的域名
allowed_domains = ['http://www.danmeila.com']
# 入口url 扔到调度器里面去
start_urls = ['http://www.danmeila.com/chapter/20180406/29649.html']
def parse(self, response):
movieList = response.xpath('//*[@id="container"]/div[3]/div[2]/div[2]/div/div/ul/li')
novelContent = NovelItem()
for item in movieList:
u = 'http://www.danmeila.com' + item.xpath('.//a/@href').extract_first()
yield scrapy.Request(u, callback= self.content_a, meta= { 'nc': novelContent }, dont_filter = True)
# 放到管道里否则 pipeline获取不到
# 如果你发现拿到的内容一直为空,注意是否被过滤了,即dont_filter没有设置
def content_a(self, response):
novelContent = response.meta['nc']
novelContent['title'] = response.xpath('//*[@id="J_article"]/div[1]/h1/text()').extract_first()
yield novelContent
注意以下几点:
- 采用xpath编写,在浏览器中可以直接查看元素,找到要爬取内容的标签,右键选copy xpath
- extract_first()的使用;text() 获取文本;@属性名 获取属性值
- 在父节点下使用xpath路径前要加./
- 去除换行空格用 xpath('normalize-space('.//div/text()')')
执行
导出为json: scrapy crawl your-spider-name -o test.json
如果出现报错信息:
- async语法错误,把用到该名称作为参数的文件全部作修改 把这个参数名改为其它即可
- 报错 No module named 'win32api': 到https://pypi.org/project/pypiwin32/#files(下载文件pypiwin32-223-py3-none-any.whl 执行 pip install pypiwin32-223-py3-none-any.whl )
若有疑问或错误,请留言,谢谢!Github blog issues
scrapy 自学入门demo分享的更多相关文章
- egg 自学入门demo分享
目录 安装 项目 连接数据库 编写model 编写controller 添加路由 2018-08,本文适用于对egg有兴趣想要了解的同学 完整项目代码:https://github.com/NameH ...
- 史诗手册!微信小程序新手自学入门宝典!
一.小程序官方指南 1:官方开发工具下载: https://mp.weixin.qq.com/debug/wxadoc/dev/devtools/download.html?t=201714 0.12 ...
- WPF自学入门(三)WPF路由事件之内置路由事件
有没有想过在.NET中已经有了事件机制,为什么在WPF中不直接使用.NET事件要加入路由事件来取代事件呢?最直观的原因就是典型的WPF应用程序使用很多元素关联和组合起来,是否还记得在WPF自学入门(一 ...
- WPF自学入门(十一)WPF MVVM模式Command命令
在WPF自学入门(十)WPF MVVM简单介绍中的示例似乎运行起来没有什么问题,也可以进行更新.但是这并不是我们使用MVVM的正确方式.正如上一篇文章中在开始说的,MVVM的目的是为了最大限度地降低了 ...
- WPF自学入门(十二)WPF MVVM模式提取函数
我们平时在写代码时为了不重复写代码,会进行复制代码或者写通用方法.今天我们就来把上传做的函数提取成为通用的方法调用.把上次写的函数提取为两个主要的文件:ObserableObject和RelayCom ...
- 自学入门 Python 优质中文资源索引
所有资源基于 Python3 版本,全部中文内容,适用于 爬虫 / Web / 数据 方向,每个单元根据学习习惯从 书籍 / 文档 / 视频 中选择一类即可,建议任选一本书籍,然后配合文档类进行学习. ...
- WPF自学入门(十一)WPF MVVM模式Command命令 WPF自学入门(十)WPF MVVM简单介绍
WPF自学入门(十一)WPF MVVM模式Command命令 在WPF自学入门(十)WPF MVVM简单介绍中的示例似乎运行起来没有什么问题,也可以进行更新.但是这并不是我们使用MVVM的正确方式 ...
- ReactJs 入门DEMO(转自别人)
附件是分享的一些他人的ReactJs入门DEMO,以前版本使用的是JSXTransformer.js,新版的用browser.min.js替代了. DEMO 下载地址:http://files.cnb ...
- Maven+SpringMVC+Dubbo 简单的入门demo配置
转载自:https://cloud.tencent.com/developer/article/1010636 之前一直听说dubbo,是一个很厉害的分布式服务框架,而且巴巴将其开源,这对于咱们广大程 ...
随机推荐
- vue中修改子组件样式
一.问题叙述 项目里需要新添加一个表单页面,里面就只是几个select,这个几个select是原本封装好的组件,有自己原本的样式,而这次的原型图却没有和之前的样式统一起来,需要微调一下,这里就涉及到父 ...
- Redis中的Stream数据类型作为消息队列的尝试
Redis的List数据类型作为消息队列,已经比较合适了,但存在一些不足,比如只能独立消费,订阅发布又无法支持数据的持久化,相对前两者,Redis Stream作为消息队列的使用更为有优势. 相信 ...
- WebGL2系列之多采样渲染缓冲对象
在很久很久以前,盘古开辟了天地,他的头顶着天,脚踩着地,最后他挂了.他的毛发变成了森林,他的血液变成了河流,他的肌肉变成了大地......卡! 哦,不对,在很久很久以前,你属于我,我拥有你.你还有没有 ...
- Touch Bar 废物利用系列 | 在触控栏上显示 Dock 应用图标
都说 Intel 第八代 CPU 对比上代是牙膏不小心挤多了,而配备第八代 CPU 的 MacBook Pro,只有 Touch Bar 版本,虽然贵了一点,但就一个字 -- 买! 收到电脑后,兴冲冲 ...
- 9.18考试 第三题chess题解
在讲这道题之前我们先明确一个丝薄出题人根本没有半点提示却坑死了无数人的注意点: 走敌人和不走敌人直接到时两种走法,但只走一个敌人和走一大坨敌人到同一个点只算一种方案(当然,前提是步骤一致). 当时看完 ...
- 9.16考试 第一题 X国的军队题解
这道题总体来看还是比较满意的.连想带打不超过半个小时,打了不到当时基本读懂后就感觉是贪心,但贪什么很重要,当时一开始想的是贪心死亡人数,从小到大搞,然后自己造了几个小数据,还好WA了,然后又列了一个式 ...
- 说说WPF的依赖属性
首先,我们先来大概了解一下依赖属性 什么是依赖属性:依赖属性自己没有值,通过依赖别人(如Binding)来获得值. 依赖属性为什么会出现:控件常用字段有限,包装太多属性会占用过高内存,造成浪费.所以用 ...
- TreeMap原理实现及常用方法
目录 一. TreeMap概述 二. 红黑树回顾 三. TreeMap构造 四. put方法 五. get 方法 六. remove方法 七. 遍历 八. 总结 前面我们分别讲了Map接口的两个实现类 ...
- stack用法,queue用法,
stack stack 模板类的定义在头文件中. stack 模板类需要两个模板参数,一个是元素类型,一个容器类型,但只有元素类型是必要 的,在不指定容器类型时,默认的容器类型为deque. 定义st ...
- Android基础知识复习之打开照相机拍照并获取照片
对于我来说,做一件事情: 首先要理清我的思路,我要打开照相机,我能想到的是:在Android中我要打开系统应用,肯定需要一个隐式意图,那就要查询Android照相机的源码,查看并找到意图过滤器的书写方 ...