Declaration
: 以下代码测试过没有问题,时间点20200603***
create project
scrapy startproject tutorial
**创建的项目 目录包含以下内容:**在做A时可以把文件目录放到问题里,看是否能说出每个文件是做什么的?
我的第一只小蜘蛛
quotes_spider.py 下 tutorial/spiders 项目中的目录:
import scrapy
class QuotesSpider(scrapy.Spider):
name = "quotes"
def start_requests(self):
urls = [
'http://quotes.toscrape.com/page/1/',
'http://quotes.toscrape.com/page/2/',
]
for url in urls:
yield scrapy.Request(url=url, callback=self.parse)
def parse(self, response):
page = response.url.split("/")[-2]
filename = 'quotes-%s.html' % page
with open(filename, 'wb') as f:
f.write(response.body)
self.log('Saved file %s' % filename)
name :标识蜘蛛。它在一个项目中必须是唯一的,也就是说,不能为不同的蜘蛛设置相同的名称。
start_requests() :必须返回一个ITable of requests(您可以返回一个请求列表或编写一个生成器函数),蜘蛛将从中开始爬行。随后的请求将从这些初始请求中依次生成。
parse() :将调用的方法,用于处理为每个请求下载的响应。响应参数是的实例 TextResponse 它保存页面内容,并有进一步有用的方法来处理它。
这个 parse() 方法通常解析响应,将抓取的数据提取为dict,并查找新的URL以跟踪和创建新的请求。( Request 从他们那里。
引擎盖下面发生了什么?(对上段代码运行原理的说明)
Scrapy安排了 scrapy.Request 返回的对象 start_requests 蜘蛛的方法。在接收到每个响应时,它实例化 Response 对象并调用与请求关联的回调方法(在本例中,为 parse 方法)将响应作为参数传递。
上段代码可以简写,如下: (以下代码测试过没有问题,时间点20200603)
import scrapy
class QuotesSpider(scrapy.Spider):
name = "quotes"
start_urls = [
'http://quotes.toscrape.com/page/1/',
'http://quotes.toscrape.com/page/2/',
]
def parse(self, response):
page = response.url.split("/")[-2]
filename = 'quotes-%s.html' % page
with open(filename, 'wb') as f:
f.write(response.body)
让蜘蛛跑起来
scrapy crawl name的名字
scrapy crawl quotes
如何用shell方式运行Scrapy?
结果显示如下:
CSS 选择器的使用方法?
CSS 选择器的作用?
css响应对象围绕xml/html元素,可以利用css响应对象进一步细化提取数据.
在title标签中提取文本的方法?
CSS查询 ::text 的作用?
意味着我们只想直接选择内部的文本元素
.getall()
的作用?
调用.getall()
的结果是一个列表:选择器可能返回多个结果,所以我们将它们全部提取出来
.get()
的作用?
当你知道你只想得到第一个结果时,就像在本例中一样,你可以这样做:
然而,使用 .get() 直接在A上 SelectorList 实例避免了 IndexError 回报 None 当它找不到任何与所选内容匹配的元素时
不推荐下面的方法.
re()
的作用?
re() 用正则提取数据的方法
XPath: 简介
例子:基于上面的
css选择器实例
问题部分:
Http://quotes.toscrape.com网站是由以上内容组成的名人名言,如何选出所有的上面的内容,用css选择器?
答案部分
问题部分
答案部分
问题部分
答案部分
问题部分
答案部分
问题部分
答案部分
问题部分
答案部分
蜘蛛的饲料出口,json格式
scrapy crawl name名称 -o name名称.json
scrapy crawl quotes -o quotes.json
多次执行的结果如下:
JSON Lines格式输出饲料
scrapy crawl quotes -o quotes.jl