使用scrapy爬取长安有妖气小说
目标网站:https://www.snwx3.com/txt/434282.html
第一章地址:https://www.snwx3.com/book/434/434282/92792998.html
最后一章地址:https://www.snwx3.com/book/434/434282/92793103.html
注意查看地址最后的,有规律。
3103-2998+1=106,但是有三章地址是重复的,所有实际有103个地址,103个章节,正好符合目录列表,(多余的这三个章节等爬取下来后再手动删除)
创建项目
scrapy startproject quotetutorial
cd quotetutorial
scrapy genspider quotes www.snwx3.com
项目结构如下:
quotetutorial/start.py文件内容
目的是直接运行这个文件从而运行爬虫,就不用在命令行中运行爬虫了
#!/usr/bin/env python
#-*- coding: utf-8 -*-
from scrapy.cmdline import execute
execute(['scrapy', 'crawl', 'quotes']) # quotes为quotes.py文件中的name变量的值
quotetutorial/quotetutorial/spiders/quotes.py文件内容
#!/usr/bin/env python
#-*- coding: utf-8 -*-
import scrapy
from quotetutorial.items import QuotetutorialItem
class QuotesSpider(scrapy.Spider):
name = 'quotes'
allowed_domains = ['www.snwx3.com']
base_url = "https://www.snwx3.com/book/434/434282/9279"
pages = list(range(2998,3104)) # 遍历页数
def start_requests(self):
# 遍历循环图书索引页
for page in self.pages:
url = self.base_url + str(page) + ".html" # 构造请求地址
print('请求第%s页' % (url))
yield scrapy.Request(url=url, callback=self.parse)
def parse(self, response):
res = response.css('#BookText::text').extract() # 使用浏览器的css选择器功能
# print(res)
item = QuotetutorialItem()
item['text'] = res
yield item
使用浏览器的css选择器功能
quotetutorial/quotetutorial/items.py文件内容
#!/usr/bin/env python
#-*- coding: utf-8 -*-
import scrapy
class QuotetutorialItem(scrapy.Item):
text = scrapy.Field() # 只获取内容,章节标题最后添加
quotetutorial/quotetutorial/pipelines.py文件内容
#!/usr/bin/env python
#-*- coding: utf-8 -*-
import os
class QuotetutorialPipeline:
def process_item(self, item, spider):
base_dir = os.getcwd()
fiename = base_dir + '/new2.txt' # 保存文件到当前目录
with open(fiename, 'a',encoding='utf-8') as f: # 防止乱码
text = "".join(item['text']) # list转str
f.write(text + '\n')
return item
quotetutorial/quotetutorial/settings.py文件内容
ROBOTSTXT_OBEY = False # 设置为False,表示不准收robots.txt规则
ITEM_PIPELINES = {
'quotetutorial.pipelines.QuotetutorialPipeline': 300, # 调用下载
}
最终效果
爬取后的结果是一行一个章节,使用notepad++软件操作,删除空白行,删除掉三个重复的章节,正好103行,表示103个章节,根据目标网站的地址,获取每章的名称,然后使用块编辑复制粘贴到每行的开头,完美。
分类:
Scrapy爬虫框架
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
2016-11-19 mysql启用慢日志查询
2016-11-19 linux下mysql忘记root密码解决方法
2016-11-19 记录php日志