Scrapy框架爬取详细步骤

来源:互联网 发布:java有多少种数据类型 编辑:程序博客网 时间:2024/06/06 00:15

Scrapy框架

(本文只做学习使用,请勿他用)


1.需求工具 pycharm 小说网的域名 (www.qisuu.com)

第一步—–创建文件

创建成功后显示如图:

这里写图片描述


第二步——将创建在桌面上的scrapy文件用pycharm打开:

这是创建成功后在pycharm中的显示

这里写图片描述

pycharm左下角打开 Terminal

这里写图片描述

打开后如图 我第一次键入了一条命令 提示爬虫名字不能和项目名称一样,更改后再运行..成功建立爬虫文件 booksspider

创建爬虫文件命令: scrapy+ genspider+ 蜘蛛名称 +网站域名

这里写图片描述

创建成功后,出现爬虫文件:

这里写图片描述


接下来,就可以在爬虫文件中写爬虫代码了

第三步——–编写爬虫代码

1.红框框起来的头部 有一个是自带的,我提前 引用了几个 接下来我需要用到的 功能模块在这里就不再详细解释模块功能,下文用到后再解释.

2.椭圆里面的内容 填写你爬取开始的页面URL,这里是自动生成的,一般是不正确的,需要自己打开要爬取的初始页,将URL复制到这里.

这里写图片描述

3.代码思路

1)请求导航条上的每个按钮对应的页面
2)分别解析每个页面的电子书列表(主要获得电子书的详情url)
3)请求详情url,解析电子书的详细信息(书名,封面,评分,大小…下载地址)
4)根据下载地址下载电子书到本地

获取导航栏文字及链接

    def parse(self, response):        a_list = response.xpath("//div[@class='nav']/a[@target='_blank']")        for a in a_list:            # 分类名称            category_name = a.xpath("text()").extract_first("")            # 拼接完整的分类url            category_url = urlparse.urljoin(response.url, a.xpath("@href").extract_first(""))            # 将分类地址转发给downloader下载并将结果传给parse_books_list            # meta:专门用来传递参数,类型是字典            yield scrapy.Request(                url=category_url,                callback=self.parse_books_list,                meta={"category_name": category_name, }            )

获取每本书链接

def parse_books_list(self, response):        href_list = response.xpath("//div[@class='listBox']/ul/li/a/@href").extract()        for href in href_list:            list_href = urlparse.urljoin(response.url, href)            yield scrapy.Request(                url=list_href,                callback=self.parse_books_detail,                meta=response.meta,                # meta={"category_name": response.meta['category_name'],}            )        all_pages = response.xpath("//select[@name='select']/option/@value").extract()        for page in all_pages:            detail_url = urlparse.urljoin(response.url, page)            yield scrapy.Request(                url=detail_url,                callback=self.parse_books_list,                meta=response.meta            )

进入书本详细页 获取书本详细信息及 下载链接 封面链接

def parse_books_detail(self, response):        info_div = response.xpath("//div[@class='detail_right']")        title = info_div.xpath("h1/text()").extract_first("")        li_list = info_div.xpath("ul/li")        size = li_list[2].xpath("text()").extract_first("")        size = size.replace(u"文件大小:", "").strip()        date_time = li_list[4].xpath("text()").extract_first("")        date_time = date_time.replace(u"发布日期:", "").strip()        user = li_list[6].xpath("a/text()").extract_first("")        download_times = li_list[1].xpath("text()").extract_first("")        download_times = download_times.replace(u"下载次数:", "").strip()        book_degree = li_list[7].xpath("em/@class").extract_first("")        book_degree = book_degree.replace("lstar", "").strip()        download_url = response.xpath("//a[@class='downButton']/@href")[1].extract()        img_url = response.xpath("//div[@class='detail_pic']/img/@src").extract_first("")        img_url = urlparse.urljoin(response.url, img_url)        category_name = response.meta['category_name']        print title, user, date_time, category_name        item = BooksItem()        item['title'] = title        item['size'] = size        item['date_time'] = date_time        item['user'] = user        item['download_times'] = download_times        item['book_degree'] = book_degree        # 小说要以GBK格式进行存储        ########################        item['download_url'] = [u"%s" % download_url]        item['img_url'] = [img_url]        ########################注意以列表方式存储        item['category_name'] = category_name        yield item

第四步——设置item /与存储有关

将需要存储的信息写入,如图所示:

这里写图片描述


第五步——配置settings /与下载有关

打开settings,找到红方框中代码,原本是被注释掉的,将 ITEM_PIPELINES{} 解注释.原本就有的内容注释掉,另外添加两条与下载图片与文本的代码. 最后,在ITEM_PIPELINES{}下面键入四行代码,分别为图片和文本的下载链接存储路径

这里写图片描述


第六步——在Terminal中输入运行命令

scrapy+crawl+爬虫名称

这里写图片描述

运行后就会出现这个啦,图片和文字全部存入这两个文件夹中

这里写图片描述


以上内容为 比较粗糙,因为本人也不太熟,仅做参考.懒癌犯了~ 以后完善

原创粉丝点击