本文适合掌握了Python基本语法,完成了逻辑训练题的同学。
不得不说目前二期同学的学习劲头和氛围比一期的要好得。大家的提问、互动和建议也比较多。
回答一个问题。昨天发了推荐的视频,今天晚上也有一场直播课程(YiCo的),讲得比较多的工具和抓取中的调试,有同学感到内容太多,对于怎么入手写一个爬虫代码没有头绪。
其实入手写简单爬虫功能还是比较简单。分成三步:
- 发起请求,返回页面数据
请求网络资源(你想抓取的URL),得到网页源代码(或者返回的json数据),这个过程可以看作就是模拟浏览器操作。 - 对网页进行解析,得到数据
获取网页中的数据,有这以下几种方法:
- 正则表达式匹配
- BeautifulSoup
- XPath
- 数据处理,存入数据库
对数据进行处理,如格式调整,进行数据库操作(或文件操作 常用csv文件格式)
针对每一步来具体讲:
1)发起网络请求的方式,urllib, urlib2, requests库,都已对网络请求高度封装了,两三行代码就可以实现。后面如果使用scrapy连这两三行代码也不用写了。
会出现的问题(或难点),对URL访问不熟悉,包括请求参数,请求头,这里就需要对URL进行抓包分析,经常使用的工具 Chrome 的“检查”工具,Fiddler等。确定分析的主要有两点:请求的URL,请求中的关键参数。
另外就是增加防Ban措施。(让爬虫伪装得像浏览器一样)
2) 对页面进行匹配或解析
正则表达式刚开始比较难掌握,原理就是用一个模板格式去套,把所需要的数据匹配出来。可以先用 BeautifulSoup 或 XPath
-
BeautifulSoup 是基于 DOM 的,会载入整个文档(就是整个网页),解析整个 DOM 树,因此时间和内存开销都会大很多。好处是比较简单,通过标签类型就可以查找定位,支持 css 选择器。
比如简书的文章标题就是在 属性为
title
的<a>
标签中
- XPath 使用是需要知道文档结构,即 确定这个标签的路径。
上面的例子,文章标题是在<div>
(属性 author) 下的<a>
标签
3)数据处理,入库操作。
循序渐进的学习方式,第一步,先把数据打印出来,好处马上看到抓取的数据结果,有成就感,便于调度,当然最好是能debug调试。第二步,数据写入CSV文件,几千条上万条数据用Excel分析起来也很方便,这种方式一般满足日常一些数据的要求,抓取尽可能多的数据练习。第三,学习mysql, mongodb数据库操作(包括程序写入,基本 sql 语句练习)
010 - 使用BeautifulSoup和XPath抓取结构化数据