目录
官方文档:https://scrapy-chs.readthedocs.io/zh_CN/0.24/
安装
Windows环境下安装
1、下载:在https://www.lfd.uci.edu/~gohlke/pythonlibs/下载对应的Twisted的版本文件
下载版本文件注意当前python的版本和位数(Twisted文件位数指的是python位数,而不是本机位数),python版本检查:python --version,位数检查:python -c "import struct; print(struct.calcsize('P') * 8)"
2、命令行中切换下载的Twisted文件目录下,然后执行命令:pip install Twisted文件名
3、Pip install scrapy
annaconda 下安装
1.安装conda
conda旧版本 : https://docs.anaconda.com/anaconda/packages/oldpkglists/
安装方法: https://blog.csdn.net/ychgyyn/article/details/82119201
2. 安装scrapy : conda install scrapy
项目
创建项目
使用scrapy startproject 项目名 :scrapy startproject <project_name> [project_dir] ——— "<>"表示必填 ,"[]"表示可选,创建项目可以切换到对应目录下进行创建,写一个名字创建的项目外文件夹和项目文件夹名字一样,写两个名字:scrapy startproject 项目文件夹名 项目外文件夹名。
报错处理
1、lxml版本冲突:ImportError: cannot import name 'etree' from 'lxml'
原因:之前安装过lxml,与现在安装的scrapy框架版本冲突。解决方法,首先卸载原来的lxml,重新安装lxml,python会自动检测和安装对应版本的lxml。
2、项目名不符合规范,项目名的命名规则同python的变量名命:项目名称必须以字母开头,只能包含字母、数字和下划线
创建成功后的项目文件目录结构
创建项目文件
先cd到项目文件夹下,然后使用命令创建:scrapy genspider [options] <name> <domain>,创建的项目文件自动存放在项目/spiders下,<name>是爬虫文件名,<domain>是域名(url)
项目文件spider对象
spider中的属性和方法
class DoubanSpider(scrapy.Spider): # 继承scrapy.Spider模板类
name = 'douban' # spider的名字,必须有,且唯一,用来唯一标记每一个爬虫文件
allowed_domains = ['movie.douban.com'] # 用于限制爬虫爬去网站的域名(可以添加多个),对不是该域名下的网站进行过滤
start_urls = ['https://movie.douban.com/top250'] # 初始的url列表
parse(self, response)方法用来生成一个Response对象
def parse(self, response):
'''
每个初始url完成之后被调用。这个函数要完成两个功能:
1、解析响应,封装成item对象并返回这个对象
2、提取新的需要下载的url,创建新的request,并返回它
提取对象内容的方法:
get():提取对象中的第一个内容,返回字符串
getall():提取对象中所有内容,返回的所有对象的列表
extract():同getall()方法
extract_first():同get()方法
re():正则使用,返回所有满足条件的结果列表
re_first():正则使用,返回的是满足条件第一个元素
'''
scrapy.Request()方法参数
class Request(object_ref):
def __init__(self, url, callback=None, method='GET', headers=None, body=None,
cookies=None, meta=None, encoding='utf-8', priority=0,
dont_filter=False, errback=None, flags=None, cb_kwargs=None):
主要使用参数
url参数:响应的url
callback:回调函数
meta:构建Request对象时,可以将要传递给响应处理函数的信息通过meta参数传入:响应处理函数处理响应时,通过response.meta将信息取出
scrapy shell调试
scrapy shell [option] [url|file] ,url 是想要爬取的网址,分析本地文件时一定要带上路径,scrapy shell默认当作url
快捷方法
- shelp()
- fetch(url[,redirect=True])
- fetch(request)
- view(response)
Scrapy选择器
支持xpath、css、re ,返回的对象为列表
xpath() 基于xpath的语法规则 ——response.xpath()
css() 基于css选择器的语法规则 ——response.css()
re()方法使用正则表达式提取数据的方法。 re_first()用来返回第一个匹配的字符串,使用re()方法时需要将其放在xpath和css选择器后面使用