简书短篇小说专栏爬取
来源:互联网 发布:淘宝直通车协议 编辑:程序博客网 时间:2024/03/29 18:59
简书短篇小说专栏爬取
- 通过scrapy框架实现
- 浏览器伪装实现
- 文件以html格式保存到本地文件夹
1.准备工作
(1)通过cmd创建项目:scrapy startproject jianshu
(2)创建爬虫文件:cd jianshu
scrapy genspider novel jianshu.com
2.开始编写
(1)用pycharm打开项目,可以看到这样的文件结构:
(2)分析网站。打开简书的短篇小说专栏|短篇小说,可以看到很多的文章:
(3)点开一篇文章,可以看到:
……小说内容
在这里,我们需要抓取的是小说链接(link)和标题(title)。
(4)在pycharm中打开items.py,编写如下代码:
class JianshuItem(scrapy.Item): # define the fields for your item here like: # name = scrapy.Field() #获取的文章链接 link = scrapy.Field() #获取的文章标题 title = scrapy.Field()
(5)打开novel.py文件,编写如下代码:
# -*- coding: utf-8 -*-import scrapyimport reimport urllib.requestfrom scrapy.http import Requestfrom jianshu.items import JianshuItemclass NovelSpider(scrapy.Spider): name = 'novel' allowed_domains = ['jianshu.com'] #start_urls = ['http://jianshu.com/'] #浏览器伪装头文件构造 header = {"User-Agent":"ozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0"} #存放所有文章来链接 allurl = [] #链接构造,实现翻页(通过简单的抓包分析可得出),爬取200页 for page in range(0,200): thisurl = "http://www.jianshu.com/c/dqfRwQ?order_by=commented_at&page="+str(page) allurl.append(thisurl) #设置爬取的初始链接,并通过生成器yield转向回调函数parse()进行处理 def start_requests(self): for k in range(0,len(self.allurl)): cu_url = self.allurl[k] yield Request(cu_url,headers=self.header,callback=self.parse) #此函数对爬取返回的数据进行相关处理 def parse(self, response): data = response.body.decode("utf-8") item = JianshuItem() #利用xpath表达式提取文章标题 alltitle = response.xpath("//a[@class='title']/text()").extract() #利用正则表达式提取文章链接(分析网页即可写出相应的表达式) pat = '<a class="title" target="_blank" href="(.*?)">' rst = re.compile(pat).findall(data) #接下来是对链接(rst)和标题(alltitle)进行去重处理,提高爬取效率。alllink和alltitle1存放的是去重后的内容 alllink = [] for link in range(0,len(rst)): if rst[link] not in alllink: alllink.append(rst[link]) alltitle1 = [] for link in range(0, len(alltitle)): if alltitle[link] not in alllink: alltitle1.append(alltitle[link]) #将爬取的文章下载到本地 for i in range(0,len(alllink)): #添加异常处理,增强爬虫的生命力 try: thislink = "http://www.jianshu.com//"+alllink[i] print(alltitle1[i]+"\n")#利用urllib.request中的urlretrieve方法下载文件,并赋予对应的标题 urllib.request.urlretrieve(thislink,"F:\\Python\\Web Spider\\Crawl Data\\简书短篇小说专栏爬取\\"+re.sub("\|","--",alltitle1[i])+".html") except Exception as err: print("出现异常:"+str(err))
(6)运行程序:scrapy crawl novel或scrapy crawl novel –nolog(忽略调试信息)
如果出现robots.txt协议不允许,打开settings.py文件。按Ctrl+F键,然后输入robots,将ROBOTSTXT_OBEY = True
改为ROBOTSTXT_OBEY = False
即可
如出现不能运行的情况,请根据错误提示信息进行修改,千万要耐心。
(7)如无特殊情况,你会在你的文件夹中看到数据,并且cmd命令行会输出文章标题:
阅读全文
1 0
- 简书短篇小说专栏爬取
- 知乎爬虫之爬取专栏信息
- [短篇小说]孟婆汤
- 剑----短篇小说
- 2012年度最佳短篇小说
- 小兵物语---短篇小说
- 刘慈欣的短篇小说
- 短篇小说:最后的入侵
- 简书用户名爬取
- 专栏
- 一个 超 超 超经典的短篇小说
- 路遥短篇小说之《匆匆过客》
- 【兴趣书签】烧脑的科幻短篇小说
- 短篇小说《日落前说爱你》全文在线阅读
- 简书文章爬取并存储到mongodb
- 取书
- 取书
- 雪女之惑:日本当代作家阿刀田高短篇小说选
- SVM
- 数据库连接池
- 读 Zepto 源码之集合元素查找
- <fmt:formatNumber>标签
- github的简单使用及创建网页的方法
- 简书短篇小说专栏爬取
- XML解析
- 关于推箱子的总结
- USACO-Section1.4 Mother's Milk
- JavaScript —— six
- 实习
- 28335 中断系统
- vfork
- 第2章 在 HTML 中使用 JavaScript 关于页面文档模式