内容简介:不同操作系统安装操作不同,可以直接看官方文档在命令行输入进入项目目录创建一个spider
安装scrapy
不同操作系统安装操作不同,可以直接看官方文档 Install Scrapy
创建一个项目
在命令行输入
scrapy startproject tutorial
进入项目目录创建一个spider
cd tutorial scrapy genspider quotes domain.com
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)
运行scrapy,在项目顶级目录下输入命令
scrapy crawl quotes
在QuotesSpider这个类里,name指明spider的名称,在 start_requests 函数里发出请求,用 parse 函数处理请求返回的结果, start_requests 函数可以替换为 start_urls 列表,scrapy会自动帮我们发出请求,并默认用 parse 函数处理,还可以设置一些其它参数,详见 Document
选择器用法
scrapy内置css选择器和xpath选择器,当然你也可以选择使用其他的解析库,比如BeautifulSoup,我们简单用 scrapy shell 展示一下scrapy内置选择器的用法,在命令行中输入
scrapy shell https://docs.scrapy.org/en/latest/_static/selectors-sample1.html
示例代码
<html> <head> <base href='http://example.com/' /> <title>Example website</title> </head> <body> <div id='images'> <a href='image1.html'>Name: My image 1 <br /><img src='image1_thumb.jpg' /></a> <a href='image2.html'>Name: My image 2 <br /><img src='image2_thumb.jpg' /></a> <a href='image3.html'>Name: My image 3 <br /><img src='image3_thumb.jpg' /></a> <a href='image4.html'>Name: My image 4 <br /><img src='image4_thumb.jpg' /></a> <a href='image5.html'>Name: My image 5 <br /><img src='image5_thumb.jpg' /></a> </div> </body> </html>
# 获取标题
# selector可以去掉
# extract返回的是列表
response.selector.xpath('//title/text()').extract_first()
response.selector.css('title::text').extract_first()
# 获取a标签里href参数内容
response.xpath('//a/@href').extract()
response.css('a::attr(href)').extract()
# 混合获取img标签的src属性
response.xpath('//div[@id="images"]').css('img::attr(src)').extract()
# 获取a标签中包含image的href属性
response.xpath('//a[contains(@href, "image")]/@href').extract()
response.css('a[href*=image]::attr(href)').extract()
# 使用正则表达式
response.css('a::text').re('Name\:(.*)')
response.css('a::text').re_first('Name\:(.*)')
# 添加default参数指定默认提取信息
response.css('aa').extract_first(default='')
Item Pipeline用法
通过parse处理函数返回的Item可以用Item Pipeline进行加工处理,主要是数据清洗,格式化。
# 过滤掉相同的item
class DuplicatePipeline(object):
def __init__(self):
self.items = set()
def process_item(self, item, spider):
if item['id'] in self.items:
raise DropItem('Duplicate item found: %s' % item['id'])
else:
self.items.add(item['id'])
return item
需要在settings里的注册一下自定义的Pipeline
ITEM_PIPELINES = {
'tutorial.pipelines.TutorialPipeline': 300,
'tutorial.pipelines.DuplicatePipeline': 200,
}
数字越小,优先级越高
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
About Face 3
Alan Cooper、Robert Reimann、David Cronin / John Wiley & Sons / 2007-5-15 / GBP 28.99
* The return of the authoritative bestseller includes all new content relevant to the popularization of how About Face maintains its relevance to new Web technologies such as AJAX and mobile platforms......一起来看看 《About Face 3》 这本书的介绍吧!