赞
踩
本实例还有另外的在线爬虫实现,有兴趣可点击在线爬取当当网畅销书Top500的图书信息
1.使用requests和Lxml库爬取,(用BS4也很简单,这里是为了练习Xpath的语法)
2.爬虫分类为两种,一种是在线爬虫,即在网站中一边打开网页一边进行爬取;第二种是本实例使用的离线爬虫,即先将所爬取的网页保存到本地,再从本地网页中爬取信息
3.离线爬虫的优点是:可以方便爬虫的调试修改,且一次保存,可以多次爬取,不必担心网络资源,网络速度以及是否被网站监测.
4.离线爬虫的缺点是:需要先进行网页的保存,如果爬取的网页比较多,那么需要保存到本地占用的空间就越大,而且文档还涉及到许多不必要的信息,浪费空间.其次是爬取链问题,如果需要在当前网页中爬取另一个网页(超链接),那么该网页也需要保存,并且需要指定存放的位置.最后是编码的问题,涉及了网页的编码,文件的读取保存编码的统一,这里可能会遇到一些编码问题需要处理.
本次爬虫爬取的网页为:
图书畅销榜-10月畅销书排行榜-当当畅销图书排行榜
爬取的信息包括图书的排名,书名,作者,好评率,购买页面以及ISBN
如图:
其中,ISBN需要在购买页面链接中继续爬取,找到ISBN
爬取之后的结果整理好存放到csv文件中.
最终成果如图:
观察需要爬取的第一页和最后一页:
http://bang.dangdang.com/books/bestsellers/01.00.00.00.00.00-month-2018-10-1-1
http://bang.dangdang.com/books/bestsellers/01.00.00.00.00.00-month-2018-10-1-25
发现只有最后一个数字改了,且每页显示20本图书,所以25*20=500,搞定.
这里自己了一个spider.py
,里面写了两个小函数,一个用于返回网站的编码格式,一个用来存放网页到本地(实现离线爬虫)
import requests import re def get_encoding(url, headers=None): # 一般每个网站自己的网页编码都是一致的,所以只需要搜索一次主页确定 'To get website\'s encoding from tag<meta content=\'charset=\'UTF-8\'>'#从<meta>标签中获取 res = requests.get(url, headers=headers) charset = re.search("charset=(.*?)>", res.text) if charset is not None: blocked = ['\'', ' ', '\"', '/'] filter = [c for c in charset.group(1) if c not in blocked] return ''.join(filter) # 修改res编码格式为源网页的格式,防止出现乱码 else: return res.encoding # 没有找到编码格式,返回res的默认编码 def savepage(response
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。