scrapy初体验
1. 构建scrapy项目
scrapy startproject ['项目名']
在spiders下生成文件
cd spiders
scrapy genspider douban_spider ['域名']
2. 明确目标
明确需要抓取哪些内容,在items.py中定义数据结构:
import scrapy
class DoubanItem(scrapy.Item):
# 序号
serial_number = scrapy.Field()
# 电影名
movie_name = scrapy.Field()
# 介绍
introduce = scrapy.Field()
# 星级
star = scrapy.Field()
# 评论
evaluate = scrapy.Field()
# 描述
describe = scrapy.Field()
3. spider文件编写
打开spider.py文件,默认会有三个参数:
class DoubanSpiderSpider(scrapy.Spider):
# 爬虫名
name = 'douban_spider'
# 允许的域名,超出该域名的链接不会进行抓取
allowed_domains = ['movie.douban.com']
# 入口url
start_urls = ['https://movie.douban.com/top250']
def parse(self, response):
pass
在def parse方法中进行内容解析:
def parse(self, response):
print(response.text)
4. 启动scrapy项目
命令行中启动
# douban_spider 即spider.py中的爬虫名
scrapy crawl douban_spider
报错403的原因:user_agent设置不对,去
settings.py中设置:USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'
在pycharm中启动
创建一个
main.py文件:from scrapy import cmdline if __name__ == '__main__':
cmdline.execute('scrapy crawl douban_spider'.split())
5. 编写解析方式
如何解析是写在def parse(self, response)中。
xpath提取内容
需要去学习下xpath的语法
movie_list = response.xpath("//div[@class='article']//ol[@class='grid_view']/li")
根据之前的item.py来封装对象
from douban.items import DoubanItem
具体代码
# 先使用xpath语法来选取,然后后跟text()函数获取内容
movie_list = response.xpath("//div[@class='article']//ol[@class='grid_view']/li")
for item in movie_list:
douban_item = DoubanItem()
douban_item['serial_number'] = item.xpath(".//div[@class='item']//em/text()").extract_first()
douban_item['movie_name'] = item.xpath(".//div[@class='info']//a/span/text()").extract_first()
content = item.xpath(".//div[@class='bd']/p[1]/text()").extract()
content_set = list()
for i_content in content:
tmp = ""
for temp in i_content.split():
tmp += temp
content_set.append(tmp)
douban_item['introduce'] = content_set
douban_item['star'] = item.xpath(".//div[@class='star']/span[2]/text()").extract_first()
douban_item['evaluate'] = item.xpath(".//div[@class='star']/span[4]/text()").extract_first()
douban_item['describe'] = item.xpath(".//div[@class='bd']/p[2]/span/text()").extract_first()
# 重点
yield douban_item
对象解析完毕后务必要调用
yield来进行提交yield douban_item
6. 翻页实现
上面的代码只能读取当前页的信息,需要去抓取下一页的链接,然后再次yield
# 取下一页链接
next_link = response.xpath("//span[@class='next']/link/@href").extract()
# 如果不为最后一页
if next_link:
next = next_link[0]
yield scrapy.Request("https://movie.douban.com/top250" + next, callback=self.parse)
7. 保存输出
在命令的后边加入-o参数即可,支持json(unicode编码保存)、csv等多个格式
scrapy crawl douban_spider -o test.json
scrapy初体验的更多相关文章
- Scrapy 初体验
开发笔记 Scrapy 初体验 scrapy startproject project_name 创建工程 scrapy genspider -t basic spider_name website. ...
- Scrapy初体验(一) 环境部署
系统选择centOs 7,Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中. 其最初是为了 页面抓取 (更确切来说, ...
- scrapy初体验 - 安装遇到的坑及第一个范例
scrapy,python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.scrapy用途广泛,可以用于数据挖掘.监测和自动化测试.scrapy的安装稍 ...
- Scrapy的初体验
上一节安装了python2和python3的开发环境 首先第一步:进入开发环境,workon article_spider 进入这个环境: 安装Scrapy,在安装的过程中出现了一些错误:通常这些错误 ...
- python--爬虫入门(七)urllib库初体验以及中文编码问题的探讨
python系列均基于python3.4环境 ---------@_@? --------------------------------------------------------------- ...
- [转]Python爬虫框架--pyspider初体验
标签: python爬虫pyspider 2015-09-05 10:57 9752人阅读 评论(0) 收藏 举报 分类: Python(8) 版权声明:本文为博主原创文章,未经博主允许不得转载. ...
- .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
不知不觉,“.NET平台开源项目速览“系列文章已经15篇了,每一篇都非常受欢迎,可能技术水平不高,但足够入门了.虽然工作很忙,但还是会抽空把自己知道的,已经平时遇到的好的开源项目分享出来.今天就给大家 ...
- Xamarin+Prism开发详解四:简单Mac OS 虚拟机安装方法与Visual Studio for Mac 初体验
Mac OS 虚拟机安装方法 最近把自己的电脑升级了一下SSD固态硬盘,总算是有容量安装Mac 虚拟机了!经过心碎的安装探索,尝试了国内外的各种安装方法,最后在youtube上找到了一个好方法. 简单 ...
- Spring之初体验
Spring之初体验 Spring是一个轻量级的Java Web开发框架,以IoC(Inverse of Control 控制反转)和 ...
随机推荐
- GIS :元宇宙未来发展的有力技术支撑
摘要:元宇宙是描述未来互联网迭代发展的一个概念,是一个将现实世界和虚拟世界相互融合的一个可感知的持久.共享的3D虚拟空间组成的世界. 本文分享自华为云社区<[云驻共创]元宇宙漫游指南-新一代GI ...
- 通过HTML+CSS+JavaScript实现鼠标移动到页面顶部导航栏出现,如果移出导航栏3秒又隐藏起来,而且不受滚动条影响(二)
通过HTML+CSS+JavaScript实现鼠标移动到页面顶部导航栏出现,如果移出导航栏3秒又隐藏起来,而且不受滚动条影响(二) 效果:默认一直隐藏导航栏,当滚动条滚到超过300px按钮出现,点击回 ...
- conda : 无法将“conda”项识别为 cmdlet、函数、脚本文件或可运行程序的名称
conda : 无法将"conda"项识别为 cmdlet.函数.脚本文件或可运行程序的名称.请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次. 解决办法: 没有添加系 ...
- Elasticsearch使用系列-ES简介和环境搭建
一.简介 Elasticsearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticsearch是用Java语言开发的,并 ...
- mysql主从模型下如果保证主误删除数据,尽可能避免数据丢失方案
- Go 常用函数
#### Go 常用函数,错误处理这一节我们来学习一下Go 常用的函数,这些函数有些是内置的,有些是官方标准库内的, 熟悉这些函数对程序开发来讲还是很重要的; 1. len("abc&quo ...
- Servlet-概念及实现一个Servlet程序
Servlet技术 一,Servlet概念 1,Servlet是JavaEE规范之一.规范就是接口 2,Servlet就是JavaWeb三大组件之一.三大组件分别是:Servlet程序.Filter过 ...
- 《手把手教你》系列技巧篇(六十一)-java+ selenium自动化测试 - 截图三剑客 -下篇(详细教程)
1.简介 按照计划宏哥今天将介绍java+ selenium自动化测试截图操作实现的第三种截图方法,也就是截图的第三剑客 - 截取某个元素(或者目标区域)的图片.在测试的过程中,有时候不需要截取整个屏 ...
- PyCharm破解无限试用
一:安装插件 1.打开PyCharm,进入后,点击左上角File,在点击Settings(设置). 2.进入后,点击Plugins,在点击(2.设置图标),然后点击Manage Plugin Repo ...
- 微信小程序--给数组的每个对象添加动画(数据驱动)
思路:用数据驱动事件,用数组的方式去对循环数组的每个对象进行操作 js代码: data:{ selectCategory: [{ name: '生产模式', content: [{ txt: '原厂' ...