我们要爬取的是读书网里面的书名,作者,和对书的描写
首先我们要定义爬取数据的模型,在items.py文件中
import scrapy class MoveItem(scrapy.Item): # 定义爬取的数据的模型 title = scrapy.Field() auth = scrapy.Field() desc = scrapy.Field()主要的还是spiders目录下的move.py文件
import scrapy from douban.items import MoveItem class MovieSpider(scrapy.Spider): # 表示蜘蛛的名字,每个蜘蛛的名字必须是唯一的 name = 'movie' # 表示过滤爬取的域名 allwed_domians = ['dushu.com'] # 表示最初要爬取的url start_urls = ['https://www.dushu.com/book/1188.html'] def parse(self,response): li_list = response.xpath('/html/body/div[6]/div/div[2]/div[2]/ul/li') for li in li_list: item = MoveItem() item['title'] = li.xpath('div/h3/a/text()').extract_first() item['auth'] = li.xpath('div/p[1]/a/text()').extract_first() item['desc'] = li.xpath('div/p[2]/text()').extract_first() # 生成器 yield item href_list = response.xpath('/html/body/div[6]/div/div[2]/div[3]/div/a/@href').extract() for href in href_list: # 把在页面上爬取的url补全 url = response.urljoin(href) # 一个生成器,response的里面链接,再进行子request,不断执行parse,是个递归。 yield scrapy.Request(url=url,callback=self.parse)想要持久化数据只有把数据保存起来:在settings.py文件里设置
在pipelines.py文件里:
import pymongo class DoubanPipeline(object): def __init__(self): self.mongo_client = pymongo.MongoClient('mongodb://39.108.188.19:27017') def process_item(self, item, spider): db = self.mongo_client.data message = db.messages message.insert(dict(item)) return item