scrapy官网:https://doc.scrapy.org/en/latest/topics/settings.html
基本上没有什么教程可以媲美官方文档的,所有的教程不过是在解读官方文档,如果有那一定是看源码。所以,如果你有耐心的话可以自己看官方文档。使用谷歌浏览器自带的谷歌翻译可以看得懂,不像python官方的文档,机翻出来基本天书。
关于各组件的功能,我觉得这个博客写的很好。可以看一下https://www.cnblogs.com/kongzhagen/p/6549053.html
如果只是参考文档的做,绝对会报错。这个还是需要百度搜一下相关文章,他们会提供简单的安装方法。
(https://doc.scrapy.org/en/latest/intro/tutorial.html)
这个主要在讲解scrapy怎么爬取quotes.toscrape.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)
4.然后,在dos窗口cd到scrapy.cfg所在的目录,输入scrapy crawl quotes。
5.这样,一个简单的使用就完成了,我们所做的只是写了一些解析网页的代码。至于怎么抓取完全由scrapy来操作。
我们来说明以下我们写的那个文件的信息。
说一下我觉得有用的几个命令
这没什么需要注意的,多用几次就知道是什么意思了。测试提取是在命令行解析数据,看看你的xpath能不能提取到数据。
前面粗略的说了一下爬虫的几个属性和方法,现在我们全面一点
以上是scrapy.Spider的一些属性和方法。还有CrawlSpider、XMLFeedSpider、CSVFeedSpider 等就不多解释了。其实有Spider就足够解决大部分爬虫了。
scrapy封装了css选择器、xpath和正则。当然你要使用外部bs4和lxml只需导入对应包就行。
这个没什么需要说的,会用xpath和pyquery基本就会这个了
(https://doc.scrapy.org/en/latest/topics/items.html)
作用是从非结构化源中提取结构化数据。通俗的来说就是从网页提取你想要的信息,然后把这些信息打包成一个类似于字典的类。注意:提取是爬虫做的事,这个文件里面的类仅仅起着一个字典的作用。至于为什么需要这样一个类就不清楚了。写法很简单,看例子。
import scrapy
class MyItem(scrapy.Item):
name = scrapy.Field()
price = scrapy.Field()
stock = scrapy.Field()
简单来说,就是将item的数据存储到数据库或文件中。另外,他还有一些其他的功能,比如清理HTML数据,去重数据等。
每个管道类都可以有四个方法,其中process_item必须有
存储到MongoDB的示例代码(这是官网照搬的):
import pymongo
class MongoPipeline(object):
collection_name = 'scrapy_items'
def __init__(self, mongo_uri, mongo_db):
self.mongo_uri = mongo_uri
self.mongo_db = mongo_db
@classmethod
def from_crawler(cls, crawler):
return cls(
mongo_uri=crawler.settings.get('MONGO_URI'),
mongo_db=crawler.settings.get('MONGO_DATABASE', 'items')
)
def open_spider(self, spider):
self.client = pymongo.MongoClient(self.mongo_uri)
self.db = self.client[self.mongo_db]
def close_spider(self, spider):
self.client.close()
def process_item(self, item, spider):
self.db[self.collection_name].insert_one(dict(item))
return item
当我们没有写数据库管道的时候,我们又想持久化数据。这样我们就可以通过 Feed exports的方式导出数据。支持json、json行、csv、xml、pickle、marshal。
使用也很简单,在抓取的时候加上-o参数。scrapy crawl quotes -o a.json
scrapy.Request(url [,callback,method =‘GET’,headers,body,cookies,meta,encoding =‘utf-8’,priority = 0,dont_filter = False,errback,flags ] )
参数:
属性和方法:
response(url [,status = 200,headers = None,body = b’’,flags = None,request = None ] )
一般是下载器返回给解析函数的响应体,所以参数不重要,直接看属性。
scrapy允许在多个层面上修改设置。他们分别是(包含优先级):
我们一般会修改2和3。2是通过爬虫的custom_settings属性来配置,3则是通过settings.py来配置。
使用scrapy的一般步骤
可以根据这个步骤一步一步的看,然后查怎么去实现。