Python爬虫 离线爬取当当网畅销书Top500的图书信息

本文介绍了如何使用Python离线爬虫获取当当网畅销书Top500的图书信息,包括图书排名、书名、作者、好评率和购买页面。通过分析网页结构,保存本地HTML文件,实现多次爬取,同时讨论了离线爬虫的优缺点以及处理编码问题的方法。
摘要由CSDN通过智能技术生成

本实例还有另外的在线爬虫实现,有兴趣可点击在线爬取当当网畅销书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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值