使用scrapy爬取海外网学习频道
一:创建项目文件
1:首先在终端使用命令scrapy startproject huaerjieribao 创建项目
2:创建spider
首先cd进去刚刚创建的项目文件overseas
然后执行genspider,并写入爬虫名称和爬虫网站域名
命令如下:
cd overseas haiwaistudy theory.haiwainet.cn
3:此时会发现在spider文件中多了一个 haiwaistudy.py,
4:scrapy默认不能再IDE中调试的所以这里我们使用一个小技巧,我们再根目录下新建一个entrypoint.py,用于后面的调试
二:编写项目文件
1:然后编写item.py,相当于容器
创建 Item 需要继承 scrapy.Item 类,并且定义类型为 scrapy.Field 的字段
2:编写爬虫文件haiwaistudy.py,定义了爬取范围,爬取内容,是否有下一页循环等信息
parse()---------parse()方法的参数 resposne 是 start_urls 里面的链接爬取后的结果。
extract_first()-----------用 extract_first()方法来获取第一个元素
extract()------获取所有结果组成的列表,所以使用 extract()方法
遇见翻页之类的情况,构造请求时需要用到 scrapy.Request。 这里我们传递两个参数一-url 和 callback
口 url :它是请求链接。
口 callback:它是回调函数。 当指定了该回调函数的请求完成之后,获取到响应,引擎会将该 响应 作为参数传递给这个回调函数。 回调函数进行解析或生成下一个请求,回调函数如上文 的 parse()所示。
urljoin()--------- urljoin()方法可以将相对 URL 构造成一个绝对的 URL
如果是一个简单的爬虫接下来可以直接使用命令的到爬虫结果了,
scrapy crawl haiwaistudy
保存成 JSON 文件:
scrapy crawl haiwaistudy -o quotes.json
以每一个 Item 输出一行 JSON:
scrapy crawl haiwaistudy -o quotes.jl
其他格式:
scrapy crawl haiwaistudy-o quotes .csv
scrapy crawl haiwaistudy-o quotes.xml
scrapy crawl haiwaistudy -o quotes.pickle
scrapy crawl haiwaistudy-o quotes.marshal
scrapy crawl haiwaistudy -o ftp://user:pass@ftp.example.com/path/to/quotes.csv
这里我个人将他存为了csv格式:
三:存入数据库:
如果想要将数据存入MongoDB则需要在Item Pipeline里进行处理,Item Pipeline的作用是:
口清理 HTML 数据。
口 验证爬取数据,检查爬取字段。
口 查重井丢弃重复内容。
口 将爬取结果保存到数据库。
要实现Item Pipeline很简单,只需要定义一个类并实现 process item()方法即可。启用 Item Pipeline 后, Item Pipeline 会自动调用这个方法。 process item()方法必须返回包含数据的字典或 Item 对象, 或者抛出 Dropltem 异常。
process_item()方法有两个参数。 一个参数是 item,每次 Spider 生成的 Item 都会作为参数传递过 来。 另一个参数是 spider,就是 Spider 的实例。
四:修改settings.py文件
在settings文件中加入以下信息
五:运行爬虫
使用终端,进入overseas文件夹,然后键入scrapy crawl haiwaistudy
然后待爬取完成可以到数据库里查看存储结果,这篇文章当 中没有写分析网站相关的内容,因为这次爬取得网站很简单没有啥加密手段,所以我没有写分析过程
GitHub代码地址:
https://github.com/meixialee/overseas
微信公众号地址:
https://mp.weixin.qq.com/s?__biz=MzU2MzcwOTAzNQ==&mid=2247483752&idx=1&sn=b1334098ca686bcf6e280683c9861f4d&chksm=fc57546ccb20dd7a6935d235a3965b9ece5a696dbda12d952c108ec6e3a8079db4fed13e0456&token=269404096&lang=zh_CN#rd
最新文章
- 如何查看mysql数据库的端口
- HTML5_01之表单新特性
- YUV和RGB格式分析
- Hibernate学习笔记--------4.查询
- android Service Activity三种交互方式(付源码)
- OpenCV在ARM上的移植
- Notes里OK,CANCEL按钮的设定
- gevent拾遗
- Android: Toolbar、AppBarLayout
- PHP 页面静态化/纯静态化/伪静态化
- (译)Web是如何工作的(3):HTTP&;REST
- 实战DeviceIoControl 之三:制作磁盘镜像文件
- [BZOJ1024] [SCOI2009] 生日快乐 (搜索)
- python 之 初识模块
- Geometric regularity criterion for NSE: the cross product of velocity and vorticity 3: $u\times \f{\om}{|\om|}\cdot \f{\vLm^\be u}{|\vLm^\be u|}$
- mybatis(3)---传参数的方法
- windows平台vs2010编译64位libiconv与libxml2
- MT【290】内外圆求三角最值
- zookeeper部署
- mysql优化:慢查询分析、索引配置优化
热门文章
- 无法从其“Checked”属性的字符串表示形式“checked”创建“System.Boolean”类型
- 在JSP中获取oracle中的时间戳类型的字段并显示
- CSS之fontAwesome代替网页icon小图标
- 使用fiddle处理跨域
- Sql Server 向上取整、向下取整、四舍五入取整
- javascript arguments参数问题
- mybatis学习系列三(部分)
- linux networking
- UITableViewCell 获取当前位置
- server 2008 软阵列