一、创建一个爬虫
1.创建scrapy项目
1.1.安装Scrapy
pip install scrapy
1.2创建scrapy项目
# myscrapy01是项目名,可以自定义
scrapy startproject scrapydemo
自动创建了一个名为scrapydemo的目录:
文件说明:
名称 | 作用 |
scrapy.cfg | 项目的配置信息,主要为Scrapy命令行工具提供一个基础的配置信息。(真正爬虫相关的配置信息在settings.py文件中) |
items.py | 设置数据存储模板,用于结构化数据,如:Django的Model |
pipelines | 数据处理行为,如:一般结构化的数据持久化 |
settings.py | 配置文件,如:递归的层数、并发数,延迟下载等 |
spiders | 爬虫目录,如:创建文件,编写爬虫规则 |
其余的都是我创建的嘿嘿嘿,别在意细节。
cd .\scrapydemo\
# douban是爬虫名,douban.com是爬取页面的地址,一般写域名即可(不用写全路径)
scrapy genspider douban douban.com
打开对应路径并找到文件:
咱们只看douban.py就行喽!
1.3启动爬虫
from scrapy import cmdline
#启动douban文件,并将爬取的数据保存成json文件
cmdline.execute("scrapy crawl douban-o douban.json".split())
二、数据提取
1.Reseponse对象获取选择器
response.xpath('//span/text').get()
response.css('span::text').get(
方法名 | 描述 |
extract()、getall() | 它返回一个unicode字符串以及所选数据 |
extract_first()、get() | 它返回第一个unicode字符串以及所选数据 |
re() | 它返回Unicode字符串列表,当正则表达式被赋予作为参数时提取 |
xpath() | 它返回选择器列表,它代表由指定XPath表达式参数选择的节点 |
css() | 它返回选择器列表,它代表由指定CSS表达式作为参数所选择的节点 |
这样我们就可以拿取网页中的元素了
2.获取下一页的数据
next=response.css('.pager .next a::attr(href)').extract_first()
# 合成绝对路径
url= response.urljoin(next)
# 访问请求的回调函数
yield scrapy.Request(url=url, callback=self.parse,dont_filter=True)
上面代码,我们通过css选择器获取到页面中下一页按钮的属性链接,通过urljoin合成下一页的路径,写一个回调函数重调用,这样可以一直获取下一页的链接,拿取每页的数据