本文转载自微信公众号[ 极客猴 ],作者知乎主页

此前错误标注来源导致侵权,在此表示歉意。

我们已经学习 urllib、re、BeautifulSoup 这三个库的用法。但只是停留在理论层面上,还需实践来检验学习成果。因此,本文主要讲解如何利用我们刚才的几个库去实战。

1 确定爬取目标

任何网站皆可爬取,就看你要不要爬取而已。本次选取的爬取目标是当当网,爬取内容是 以 Python 为关键字搜索出来的页面中所有书籍的信息。具体如下图所示:

本次爬取结果有三项:图书的封面图片

图书的书名

图书的链接页面

最后把这三项内容保存到 csv 文件中。

2 爬取过程

总所周知,每个站点的页面 DOM 树是不一样的。所以我们需要先对爬取页面进行分析,再确定自己要获取的内容,再定义程序爬取内容的规则。

2.1 确定 URL 地址

我们可以通过利用浏览器来确定URL 地址,为 urllib 发起请求提供入口地址。接下来,我们就一步步来确定请求地址。

搜索结果页面为 1 时,URL 地址如下:

搜索结果页面为 3 时,URL 地址如下:

索结果页面为 21 时,即最后一页,URL 地址如下:

从上面的图片中,我们发现 URL 地址的差异就在于 page_index 的值,所以 URL 地址最终为 http://search.dangdang.com/?key=python&act=input&show=big&page_index=。而 page_index 的值,我们可以通过循环依次在地址后面添加。因此, urllib 请求代码可以这样写:

2.2 确定爬取节点

有了 URL 地址,就能使用 urllib 获取到页面的 html 内容。到了这步,我们就需要找到爬取的节点的规则,以便于 BeautifulSoup 地解析。为了搞定这个问题,就要祭出大招 —— Chrome 浏览器的开发者功能(按下 F12 键就能启动)。我们按下 F12 键盘,依次对每本书进行元素检查(在页面使用鼠标右键,点击“检查”即可),具体结果如下:

从上图可以得知解析规则:每本书的节点是一个 a 标签,a 标签具有 title,href,子标签 img 的 src 三个属性,这三者分别对应书名、书的链接页面、书的封图。看到这里也需你不会小激动,感叹这不就是我们要感兴趣的内容吗?得到解析规则,编写BeautifulSoup 解析代码就有了思路,具体代码如下:

运行结果如下:

这证明刚才制定规则是正确爬取我们所需的内容。

2.3 保存爬取信息

我写爬虫程序有个习惯,就是每次都会爬取内容持久化到文件中。这样方便以后查看使用。如果爬取数据量比较大,我们可以用其做数据分析。我这里为了方便,就将数据保存到 csv 文件中。用 Python 将数据写到文件中,我们经常中文乱码问题所烦恼。如果单纯使用 csv 库,可能摆脱不了这烦恼。所以我们将 csv 和 codecs 结合一起使用。在写数据到 csv 文件的时候,我们可以通过指定文件编码。这样中文乱码问题就迎刃而解。具体代码如下:

看到这里,你可能会问为什么不把编码指定为 gb2312 呢,这样用 ecxel 打开就不会乱码了?原因是当书名全部为英文单词时,使用 gb2312 编码,writer.writerow()会出现编码错误的问题。

如果你要用 excel 打开 PythonBook.csv文件, 你则需多执行下面几步:打开 Excel

执行“数据”->“自文本”

选择 CSV 文件,出现文本导入向导

选择“分隔符号”,下一步

勾选“逗号”,去掉“ Tab 键”,下一步,完成

在“导入数据”对话框里,直接点确定

3 爬取结果

最后,我们将上面代码整合起来即可。这里就不把代码贴出来了,具体阅读原文即可查看源代码。我就把爬取结果截下图:

4 写在最后

这次实战算是结束了,但是我们不能简单地满足,看下程序是否有优化的地方。我把该程序不足的地方写出来。该程序是单线程,没有使用多线程,执行效率不够高。

没有应用面向对象编程思想,程序的可扩展性不高。

没有使用随机 User-Agent 和 代理,容易被封 IP。

你想更深入了解学习Python知识体系,你可以看一下我们花费了一个多月整理了上百小时的几百个知识点体系内容:

python爬虫爬当当网_爬虫实战一:爬取当当网所有 Python 书籍相关推荐

  1. python爬虫大作业爬多少数据_爬虫大作业

    1.选一个自己感兴趣的主题(所有人不能雷同). 2.用python 编写爬虫程序,从网络上爬取相关主题的数据. 3.对爬了的数据进行文本分析,生成词云. 4.对文本分析结果进行解释说明. 5.写一篇完 ...

  2. python批量下载静态页面_爬虫实战之,爬取壁纸,批量下载

    一.前言 在开始写爬虫之前,我们先了解一下爬虫 首先,我们需要知道爬虫是什么,这里直接引用百度百科的定义 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按 ...

  3. 爬虫python和c语言区别_爬虫概述 - Python教程 - C语言网

    网络爬虫(又称为网页蜘蛛,网络机器人,更经常的称为网页追逐者),它按照一定的规则自动地抓取网络信息. 1. 产生背景 随着时代的进步,互联网上拥有大量的信息,但是我们该如何高效的获取这些信息成为了一个 ...

  4. python爬虫携程酒店_携程酒店爬取分享

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 import urllib.request from bs4 import BeautifulSoup import csv import re def ...

  5. python爬虫实时更新数据_爬虫的增量式抓取和数据更新

    一些想法 页面爬的多了,量上去了之后,就会遇到其他的问题,其实不管做什么技术量大了都会有问题.一般情况下,我认为解决"大量"问题的思路有两个:一种是着力于优化系统的能力,让原本只能 ...

  6. python 批量下载网页图片_手把手教你爬取天堂网1920*1080大图片(批量下载)——实战篇|python基础教程|python入门|python教程...

    https://www.xin3721.com/eschool/pythonxin3721/ /1 前言/ 上篇文章 手把手教你爬取天堂网1920*1080大图片(批量下载)--理论篇我们谈及了天堂网 ...

  7. python开发自己的工具包_爬虫开发python工具包介绍 (4)

    本文来自网易云社区 作者:王涛 此处我们给出几个常用的代码例子,包括get,post(json,表单),带证书访问: Get 请求@gen.coroutine def fetch_url(): try ...

  8. python爬虫工程师工作内容_爬虫岗位职责

    岗位职责: *针对复杂的网站架构主动获取相关数据信息: *负责数据获取.清洗和分析工作. 任职要求: *计算机科学.应用数学.统计学.物理学.天文学.商业分析.信息系统.数据科学或相关专业本科或以上学 ...

  9. python网页版百度_python,_爬虫 页面不存在_百度搜索,python - phpStudy

    爬虫 页面不存在_百度搜索 1.学写爬虫,遇到一个问题,加了values={"wd":"test","ie":"utf-8&quo ...

最新文章

  1. 人工智能会被赋予人性么?
  2. jstl java_JSTL-Java-Baby-51CTO博客
  3. tp5 引入 没有命名空间的类库的方法(以微信支付SDK为例)
  4. ue4 运行禁用鼠标_从零开始——三:关闭电脑无用服务提高运行速度
  5. 浅谈linux IO
  6. 基于canvas的原生JS时钟效果
  7. php 抓取天气情况 www.weather.com.cn
  8. html 内容不被父级包住,解决:父级元素不能被子元素内容撑开的解决办法,父级元素没有高度的解决办法...
  9. Java ClassNotFoundException – java.lang.ClassNotFoundException
  10. Android 反编译三种方式
  11. matlab 动态面板数据分析,MATLAB空间面板数据模型操作简介 空间面板数据模型
  12. [导入]146部玄幻小说合集
  13. hive的dual表
  14. 如何挑选适合自己的笔记本电脑
  15. mysql 在指定的dsn中_access 在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配...
  16. 【网络攻防CTF】Crypto 密码学 python循环多次base64解码题目(保姆级图文)
  17. OGR几何要素处理(创建编辑点线面)——Python地理数据处理学习分享
  18. 股票大数据分析软件V2.7
  19. intra-mart知识
  20. 【Python】unicode编码和bytes编码不能混用

热门文章

  1. 全球及中国浆液阀行业市场深度分析及发展战略咨询报告2022-2028年
  2. Macbook外置移动硬盘安装win10教程
  3. java基础之import语句_繁星漫天_新浪博客
  4. 2019掘安杯原题复现
  5. 文秘类计算机,文秘类包括哪些专业
  6. android电视如何打开adb调试模式,分享解密某Android电视adb后门方法
  7. 硬件探索——D触发器74LS74在Multisim中搭建四分频电路
  8. HAL库实践记录之串口接收不定长数据
  9. IOS项目新手引导页图片适配方案
  10. pps服务器没有响应,为什么pps服务器未响应,停止播放我家用的是Avira AntiVir 控制中心...