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+爬虫名称
这里写图片描述
运行后就会出现这个啦,图片和文字全部存入这两个文件夹中
这里写图片描述