Python爬虫实现——豆瓣标注想读的书去图书馆查询索书号后导出表格
2017-10-26 有更新,并有代码
https://www.douban.com/note/642675241/
我用一天多时间,终于解决了一个困扰我多年的问题——怎么自动把我豆瓣标注想读的书去市图书馆网站查询索书号然后导出表格给我,索书号排序后,我就可以专心地按顺序找我要看的书了。 基本思路是,爬虫爬到豆瓣想读的数据,用书名+作者去图书馆网站查索书号,保留索书号,导出表格。 好的,第一步,我不会爬虫啊…… 没关系,爬虫超级好学。 def get_page(url): request = urllib2.Request(url) my_page = urllib2.urlopen(request).read() return my_page 就这样拿到了html数据。 第二步,提取数据,我要提取书名和作者。 正则……我不会正则…… 没事,对于我的需求,正则一分钟入门就可以了。 记住 .*? 这个组合,它代表“任意字词”(非贪婪模式),非贪婪模式是什么也不需要深入了解了,反正我用.*? 略过我不需要的片段,用 (.*?) 提取我要的那个片段,就ok了! 提取错误就不断尝试!~ #查询豆瓣想读书籍列表 def find_book_info(url) : my_page = get_page(url) book_info = re.findall(r'<li id="list.*?class="item".*?<a href="(.*?)">(.*?)</a>.*?class="intro">(.*?)/', my_page, re.S) return book_info 第三步,该去图书馆网站弄数据了。 分析图书馆网站的查询网址,书名+作者搜索还是很好仿造的,关键是***的,竟然提取不到索书号!开源网页发现,源网页没有半个影子的索书号,索书号是js请求的……js请求的……js请求的…… 懵逼了,搜索啊搜索,从模拟浏览器操作看到各种js框架,终于被我发现一个很简单的解决办法! (9)分布式下的爬虫Scrapy应该如何做 (这难道就是传说中的抓包?) 通过找F12-Network-XHR里的json请求,我得到了查询索书号的网址,就是要用图书馆自编的编号去查,这个编号从图书馆的书名+作者搜索页很好得到,于是埋头做啊做啊做啊…… 第四步,对图书馆的数据进行处理,比如剔除掉我不需要的分馆、剔除掉不可借的书,将我要的3个分馆数据分别写入3个文件。 第五步,以上爬的都是我豆瓣想读的第一页,15个条目。我把豆瓣想读按列表显示,一页就可以查询30个,修改上面的正则,试通了,再循环豆瓣想读的所有页数。 后来又加上了多页爬取、分馆屏蔽、超时判断、过程提示、书名+作者搜不到的按书名搜、表格增加图书馆书名和作者数据。 详情就不写了,表格增加图书馆书名和作者数据这一项真是让我速成了正则,做些笔记如下: 正则小技巧: ? 表示贪婪模式 .*? 匹配任何字符(不含换行符) [\s\S]*? 匹配任何字符(含换行符) \s* 匹配任何空白字符 标题、作者、出版社—— (1) id="title_.*?>\n\s*(.*?)\s*\n (2)著者:\s*.*?>\s*(.*?)\s*</a> (3)出版社:\s*.*?>\s*(.*?)\s*</a> 然后把3个用[\s\S]*?串起来


编程改变命运啊~在不久以前,我还是一个个书名作者地去查出来,利用拍照或者笔头记录的方式保留索书号的……